|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; N$ @! c, r+ A. X8 ~% B* \
#include <linux/init.h>. k* Y. E4 h i" k$ i$ V( p$ U
#include <linux/module.h>
6 B: f d- `0 S. z#include <linux/kernel.h>9 v! T3 x4 Y( H t# x2 F
#include <linux/types.h>/ }$ j$ R1 V0 Q) y. X& @6 |1 S
#include <linux/gpio.h>
) h4 W3 X7 k/ n3 N/ ^. V#include <linux/leds.h>
. r6 A) z3 ]: A; z7 h/ O#include <linux/platform_device.h>) D# A$ F9 k) N0 N3 M8 P
, ?. t/ w5 `3 O* }6 O#include <asm/mach-types.h>
9 c% f7 k# u7 O! |8 q/ i#include <asm/mach/arch.h>
, \2 G6 ?( g+ I" Q/ _3 ?& y#include <mach/da8xx.h>; v) P& e3 d+ n' e& v3 H3 F
#include <mach/mux.h>
; g, F' f& L3 R. j n& Q/ W) ~2 ~9 h3 s: `4 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 f5 e" S- B. x' b. \# B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 S# c4 W, q2 D7 J9 j' u5 q) |) {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 ?6 }6 D7 B2 y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): e& y& c1 D( p7 u, i
/ i" V: m1 f4 H* Q% H# r8 B3 ^( q. t
/* assign the tl som board LED-GPIOs*/
^( M5 H; ~3 kstatic const short da850_evm_tl_user_led_pins[] = {
% o6 w# g' B$ j: v) x2 n5 `8 r* | /* These pins are definition at <mach/mux.h> file */, P0 y& }. x. C/ z* D9 y: r) q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ a5 r4 ^ G7 F+ h" U
-1
/ y8 |& r( N. y. L$ V( N};) O2 y7 [* q3 l
9 n1 ]0 P8 \* Z& Q" X* i: _
static struct gpio_led da850_evm_tl_leds[] = {
! t6 ~# A! j( m9 A {2 U" |) A8 [5 p% z8 \3 j
.active_low = 0,
- W8 b; E% H* `# x" W; {6 }( I .gpio = DA850_USER_LED0,' J! R- F7 l. d* Q7 G( Q' Z3 v
.name = "user_led0",) A8 k& H. F" h% E) s
.default_trigger = "default-on",
% q- E8 M, _- }+ A. A+ Q },/ g F! {: n+ U1 k/ V
{
4 Z Z% p6 g5 o8 t) x e: ^, @ .active_low = 0,
. _$ [+ i* r' M7 X4 R8 M C .gpio = DA850_USER_LED1,4 P3 F) O& S; K, S h e: y
.name = "user_led1",7 H, H l: m- Z$ ]. G
.default_trigger = "default-on",3 f$ X9 q) _' N5 F/ T2 v
},
" e% m. K8 z0 I! H" @# R$ d {) a5 E, j- P0 B% z4 g( U
.active_low = 0,6 N- [1 O% V! t/ d5 y
.gpio = DA850_USER_LED2,5 f' H2 Q/ _3 M( p
.name = "user_led2",7 J. [/ h9 e& ^3 ?5 F
.default_trigger = "default-on",
5 a' g# d! C. T# ` },
9 {5 [# P: j* G. l4 R* a) f' z {
7 N' C; ]$ J. o .active_low = 0,9 l. L' U) T$ |2 ]9 \! N
.gpio = DA850_USER_LED3,3 Y8 u& |5 h. X/ n% R+ Y$ P
.name = "user_led3",0 ?9 N: j8 [$ }9 w d" e( w
.default_trigger = "default-on",* j" s1 s2 L; a) Q9 O+ H( Z
},
( G' i7 u; j/ _/ ]; v% Y% c};: J* }+ A, O+ C
) v/ C3 |' x' w( l, E* ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) q/ M N; p0 s6 S; h/ ~) r5 J$ Z
.leds = da850_evm_tl_leds,3 Y' g7 |5 G: G1 Q2 U' @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; B. G) R' T4 U. l3 c
};4 ~, G4 c8 z7 _9 U% n
) a0 w1 V! G/ [2 B9 L# b2 F( Hstatic void led_dev_release(struct device *dev)
3 I |6 s9 y' E# j# s* F6 ]8 y{
) D1 H' G! v2 ^$ z3 z) g2 Y};8 J3 T; p/ ?1 p
4 Z4 x0 `9 r7 V6 p( W. x- C( Bstatic struct platform_device da850_evm_tl_leds_device = {
: Z, j: x1 M" L9 n# ^" ]! W .name = "leds-gpio",
& W2 O: q/ q$ X0 _ w* g' B" v .id = 1,% C# j+ [& o4 B% u
.dev = { @+ p! n5 ~: ?' S6 z& I6 P" M
.platform_data = &da850_evm_tl_leds_pdata,
) i, e& R$ _* S; x: {* {9 U, g4 z .release = led_dev_release,% C$ \, \% R( o1 N
}
, X, N, Q; d' Z4 @3 P6 g: U};4 p9 J$ o8 @: W" V
4 C$ d8 t, [: w7 N; R$ astatic int __init led_platform_init(void)
+ V0 O; h, x: M3 X* r6 b{5 s) _" d. v; c4 K/ T
int ret;
& J# g- I8 m( @( i) P5 K. p#if 0/ r* W3 K, S* v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# W, B" ~1 M: x k, Y m& s if (ret)
) x# W: _, A! B7 o' b6 t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 Y, E) a1 m! P9 s) @
"%d\n", ret);
( G1 Y$ O: Q* O/ ^; o#endif
! m$ M( S" K9 w+ m# ]% T/ P Q ret = platform_device_register(&da850_evm_tl_leds_device);/ O7 W/ O$ ^5 z. v. U; d2 @* _
if (ret)9 X9 c7 D9 r1 @* N( I) i
pr_warning("Could not register som GPIO expander LEDS");
3 G6 n& r3 g+ o( [ else( a4 F& y) O$ b; [$ `6 n
printk(KERN_INFO "LED register sucessful!\n");5 ?0 w3 c4 b; i1 ]
4 [8 G8 L! o* ^7 A- g
return ret;; g) f0 J7 s& X" R1 }
}- Z. D+ ]$ t# B
8 n) v0 u+ h- {% r" a, C8 X0 _
static void __exit led_platform_exit(void)
' Q0 D( f6 T8 E: |4 H$ b0 K$ \$ K, r7 j{$ u/ ?( t4 J/ N+ h. ]
platform_device_unregister(&da850_evm_tl_leds_device);
* g0 g: A! T$ A* ^5 x6 V7 G
) ^8 N L9 @: s+ _5 c$ ? printk(KERN_INFO "LED unregister!\n");
8 ]5 v/ Q; t# i}8 J9 t4 I/ f0 y) B( Q( U) [" K
% |- G4 a8 Z0 P$ A2 f3 Ymodule_init(led_platform_init);. y3 k0 H! { l
module_exit(led_platform_exit);. l( K1 i( O+ r% p5 Z
% E- A1 ]$ }/ c
MODULE_DESCRIPTION("Led platform driver");
0 c" ?; K/ K7 c- |5 kMODULE_AUTHOR("Tronlong");! h! {' Y( c- `+ L$ F) V4 |& u
MODULE_LICENSE("GPL");. {7 I! I3 @% g8 K
+ M! n& R* M) z6 P0 r( J" o |
|