|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" o3 h: y5 ^- {- L3 @& E+ G* w
#include <linux/init.h>
& ^3 t5 F, n( b( O2 y0 q5 K#include <linux/module.h>
% `4 B8 \+ b! O. W( ^; {#include <linux/kernel.h>
$ G7 ?$ j/ k8 j' f2 W8 T' ]) y#include <linux/types.h>
; a) F9 q, B, Z; d8 O#include <linux/gpio.h>8 o% |" r; Z& N6 q
#include <linux/leds.h>
$ W! G8 D- a. f) W6 W7 p( W- H#include <linux/platform_device.h>
' ?4 U9 K- z7 E' x0 ~ u1 S: v& V$ y
#include <asm/mach-types.h>
4 }% N5 x/ f& o1 e7 f0 Q: Q. ]#include <asm/mach/arch.h>+ u: d, X3 z9 Z2 }; V3 m! E6 ?- x" u
#include <mach/da8xx.h>4 q6 n: y, B- U0 k+ z6 I a6 f
#include <mach/mux.h> p9 ~8 m( t+ ?: O/ `1 z
5 a( q9 G/ \% g3 O! F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 g5 S" Y( Z- i1 O5 G, `. y9 b. M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 p1 d# c1 J2 S) S. r- |# P* O! }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" ?- b5 W2 K( A9 x# G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" b' @1 V/ `! O4 K* j0 ~
/ N( o" t, L( v: o/* assign the tl som board LED-GPIOs*/9 y/ U$ S: S! R8 K7 }0 ]1 ?# ^- \
static const short da850_evm_tl_user_led_pins[] = {
; }# m: |* k0 P1 s- \# j% `6 j9 Q /* These pins are definition at <mach/mux.h> file */2 ?1 q, k! k L& o- K& X& B* U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& l. i$ P0 w1 w( C8 Z -1
* z" ]) p- i- n. A5 b4 g};
6 }+ l$ \% ~6 j D! _
$ Q* [- V9 W" T& `9 X0 i# t* W& Istatic struct gpio_led da850_evm_tl_leds[] = {
1 K2 {! x5 ?' i- C3 w* ]& S K5 } { M1 v) M6 j1 P* v1 |/ x" N
.active_low = 0,' ^; _2 o* X8 P [! X Y
.gpio = DA850_USER_LED0,9 Q/ Q) E+ S& l' L
.name = "user_led0",
" B7 |# S$ r- y) L% \3 |2 f .default_trigger = "default-on",8 D8 c" B0 T; ?- T4 O0 D1 f& _) ~: j
},
7 B6 Q8 N0 B1 W- ~' B: f7 @4 ` {0 F; [1 X* \# V- u! A5 W& j" H' d3 w
.active_low = 0,7 i' U; S8 z2 e0 N' {
.gpio = DA850_USER_LED1,
! C& M$ P& v" e. ?" ? .name = "user_led1",! m6 q/ L( O0 q+ r. E+ E0 K4 T
.default_trigger = "default-on",$ M* y: k6 N6 g$ @( X) ?
}," n/ }' g. C: b) F- v# r
{5 F' I; y4 z* M/ }( n) R( v" w
.active_low = 0,
B, A+ b2 o6 ^2 z5 A) O! V .gpio = DA850_USER_LED2,
0 k+ _1 C$ ?% Y6 {( ^4 j1 I$ x8 _ .name = "user_led2",
- j7 ~" z% {3 J" e: G .default_trigger = "default-on"," l/ z' s/ h% v
},0 `+ H2 u) Y! M
{1 k6 X, G% K9 s6 a# X
.active_low = 0,! y4 i2 b' {8 i3 M9 ^
.gpio = DA850_USER_LED3, H* L7 q% E+ @) J/ x
.name = "user_led3",9 P# {5 L- B9 e1 y- R
.default_trigger = "default-on",
. @5 X. W8 @; z4 k) R },$ |; U: i. d+ R- J
};6 W- t' O6 g9 O$ S- z) q
3 }2 e. X# B( A& Y5 c" u2 D7 Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: \9 I- U& }' B7 p, b. ~ .leds = da850_evm_tl_leds,! s0 h) O' Z8 }9 t# w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: \' U+ e7 e" y+ N- u1 i9 ~};! a' f$ p6 ?+ v; S" R
# u3 V- n' L) t8 G1 s; h' ]static void led_dev_release(struct device *dev). l2 S; K' F: M" l- Z
{
! g5 D" `( _4 X n' U};
1 q0 J8 v T, n. Y7 ]3 z' a- L, ?; c7 n+ x4 L4 u! K
static struct platform_device da850_evm_tl_leds_device = {" e0 g! ]/ f8 d
.name = "leds-gpio",
. H3 n2 `7 x$ U5 g6 I .id = 1,
) w2 }+ @5 }8 x( k$ Z9 y .dev = {: {. R$ ?& f- v# t8 T
.platform_data = &da850_evm_tl_leds_pdata,
5 l# g% ` d( P1 i6 n# A. t% S .release = led_dev_release,5 M- Y" A6 Z& u
}' H* C+ @9 Z/ S; e- ^; t
};- C- k6 a7 b; g. \6 n3 M4 s
2 Y [6 H6 A% Z! J5 f! ~; h$ estatic int __init led_platform_init(void)/ `7 K; B! L+ f$ ^ K
{% s7 I2 b! r2 e9 B% ~! _
int ret;
, U# N+ t+ ^4 F) }- P5 W5 W' y& R# [#if 0
& y7 T6 D2 k, `8 {5 S9 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 m% B A2 G$ ^/ q
if (ret)4 w* F9 p' L" {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" i [5 u" i, `, \
"%d\n", ret);
7 Z: v, p: _$ S1 W$ U#endif) o) U# W7 @$ z% M& h% D0 G
ret = platform_device_register(&da850_evm_tl_leds_device);
- {- F3 N* S6 x) J! e if (ret)
3 l* ?, _2 g: o7 ]" E1 v pr_warning("Could not register som GPIO expander LEDS");
. A/ s0 s& n: p6 ]; G' _' O j else( S3 h# V' l- N( T2 o
printk(KERN_INFO "LED register sucessful!\n");
; Q9 q; C( U; z: D: X; V6 o N5 ]% Q
return ret;; J- W5 {9 w, M# \6 l
}. p% p& K0 V! E# e
L9 U' d* n- w8 p
static void __exit led_platform_exit(void)( K0 H/ G+ p9 J- _- D) ]
{% |$ c6 p$ C% [$ [: m
platform_device_unregister(&da850_evm_tl_leds_device);# D9 {& C1 T$ i
% z5 F+ R+ Y: X" t
printk(KERN_INFO "LED unregister!\n");
' o- b+ l4 N; E1 \}
# B( j1 q+ u2 ~) p# C! T
" ~# Y0 V9 B$ E, y8 dmodule_init(led_platform_init);$ V" |1 H8 i' x- R
module_exit(led_platform_exit);, t- n* r" `6 n- q3 I/ \7 K9 Z$ U
6 `. S. Z6 q. [
MODULE_DESCRIPTION("Led platform driver");" s; A0 v0 ]6 [9 l
MODULE_AUTHOR("Tronlong");$ g) b N7 _! o: b& w2 V" \+ A/ `: w
MODULE_LICENSE("GPL");8 N- |% s& p v U( M- b
- T# r5 K" O3 ^/ |- ^7 @ |
|