|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 @. Z3 q, [9 u8 M! v$ z#include <linux/init.h>
& ^- i; c3 C, |2 d# ~#include <linux/module.h>
: A# k0 W% a0 \$ D4 e% b; y#include <linux/kernel.h>
6 \9 c& P$ a: y! l" w/ I% P: y! Z#include <linux/types.h>
- A& Z8 n2 r9 f8 L# a#include <linux/gpio.h>: Y- F5 c& U' f$ L. W/ x
#include <linux/leds.h>7 q- n3 |9 }/ ^' w
#include <linux/platform_device.h>
, |/ j" R1 e# k0 L# ^4 P1 P+ W0 H9 v- O c
#include <asm/mach-types.h>+ t3 x* l+ [1 ?! h) ?- P! }
#include <asm/mach/arch.h>7 Y4 b. [! i1 }. r/ M
#include <mach/da8xx.h>
8 {3 s$ Y8 I+ |; ]# I#include <mach/mux.h>3 b8 t# B; p& l/ O, X
F; i3 @ U! I2 `+ }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( c9 R4 ]1 j/ v- u5 W1 ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). k# a* q, c2 g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- L0 I' h6 s9 G3 j( h' `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 y4 C/ I' Y' ]7 q) B
5 C& t [3 s, d7 m) G! n/* assign the tl som board LED-GPIOs*/
9 x, _ f( t* ?" k' Dstatic const short da850_evm_tl_user_led_pins[] = {
2 b% I+ ^7 C- G6 ~! U4 j$ e /* These pins are definition at <mach/mux.h> file */
5 s- u5 [: j5 ~# ]( [* p0 c' ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 ~9 X7 L4 i |" U: l7 { -1
1 D" I1 a9 o+ V0 m. h};
: ], R% x3 z2 a, ?6 ^+ s2 X4 ~; z9 n T4 B) K* J
static struct gpio_led da850_evm_tl_leds[] = {
# _/ Y6 w! p2 |) h3 s0 E) L { ]6 x1 D: A( h
.active_low = 0,/ }: v o7 @: Z! F& j
.gpio = DA850_USER_LED0,3 f" \0 Q2 x! J6 c$ u& z0 a
.name = "user_led0",
. }' G3 f9 u2 n) {. i" @0 k, `9 v .default_trigger = "default-on",
' P- Z# f8 S! n( `0 \$ d# P },: q1 b7 y% `6 ?3 {, n0 q) o
{5 K0 Z2 O0 [' W# U
.active_low = 0,
; Y1 G5 h$ e* H0 ~0 y4 O4 W5 i# H .gpio = DA850_USER_LED1,5 R" Y, v; G" [/ F, y( T" k$ W
.name = "user_led1",: L9 z0 z4 I4 T
.default_trigger = "default-on",0 ]5 n+ \( u% x2 C
},
, w& P ^) J& W6 ^; p' u2 }. ^ {
- j+ _* g f! m .active_low = 0,
1 } t7 D8 G; K" I" c7 o8 D$ m; r& }& \ .gpio = DA850_USER_LED2,: T- z. ^: y' W: `: l+ `. }
.name = "user_led2",0 W8 {# f a: Z3 n8 Y j( Y0 a
.default_trigger = "default-on",$ I4 A( n# |& T# c' `
},
$ _" Q: a! b+ x+ i {$ U: |7 F: u4 c
.active_low = 0,( n( F1 r3 s4 D6 p, y% ^
.gpio = DA850_USER_LED3,2 S5 [$ Z& W9 D( g( A* a) M
.name = "user_led3",0 I5 p8 }+ S% Y# r7 B
.default_trigger = "default-on",& O3 ?9 Q M, E( y5 Q
},
: ]! U5 g; U P};1 e0 g8 Y0 X9 \) J3 V+ d! |
- n- U, n0 w3 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( _$ N7 H# m& I ^9 W
.leds = da850_evm_tl_leds,# ? ^4 c' L0 L( L0 m O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ S. R2 j" [8 o+ {
};9 Q" `# c: e/ R0 o. e7 T) ~ @/ x
4 _- n1 S$ l; Mstatic void led_dev_release(struct device *dev)
# p% ?! A9 O$ w! g. R5 V5 o{
+ ~0 R& Z) A; E' s};$ ]' Z+ m) `8 Y# e' [4 q
* S( h% y( s, p* y# X9 a2 l
static struct platform_device da850_evm_tl_leds_device = {
' ~: B' A, F2 F T4 m/ O .name = "leds-gpio",' b7 i# h7 N- t( ?: H9 g! i: i
.id = 1,# e7 X& p1 x: ?8 n6 h- w
.dev = {( Z/ ?$ R# f4 _# ^. @- v) M/ [
.platform_data = &da850_evm_tl_leds_pdata,
7 a$ f3 Q- }/ ^* H .release = led_dev_release,3 F# h1 @; V5 ~7 B# e9 F+ j, a
}( l8 j' u; `% K/ o
};
0 a6 Y7 h- Q P; n
% Q) _9 F, y$ Z& N( m/ Kstatic int __init led_platform_init(void)
7 n- D5 |6 I/ {' W{
- j0 L) Q+ j1 L" o# u# R3 M int ret;
3 d9 \/ Z4 @0 o* z) t2 l#if 0
3 l3 t, p- y u& b2 a2 z' Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- P8 f. K7 \- m( |7 C
if (ret)
1 ?+ t8 i' q' Y. q5 ]9 n! k pr_warning("da850_evm_tl_leds_init : User LED mux failed :" B1 T9 Q* E i, C+ {6 a
"%d\n", ret);
% s5 y- b" u% f8 L#endif' }/ U$ }& `9 E) r
ret = platform_device_register(&da850_evm_tl_leds_device);
: U, j. Y: @% @% M8 }1 p if (ret)
5 b. v! w! e( {- H* r pr_warning("Could not register som GPIO expander LEDS");% s0 T! P2 B# |" X
else
9 |- {' D! |3 V! o' k }7 T, Q1 M7 B" U printk(KERN_INFO "LED register sucessful!\n");
0 P% n8 `3 t4 F3 M9 o1 v: k4 h$ P7 s2 B4 R* ]
return ret;
4 M) h9 m+ ~0 H, }# W1 L}3 f* I! |( R* y
# ]! K1 k! I9 a, a/ n5 X+ }
static void __exit led_platform_exit(void)8 ^+ Z; Y: @4 x& L
{$ Z( O9 p0 T4 k, [* e9 f. V$ j' F3 s9 W
platform_device_unregister(&da850_evm_tl_leds_device);' a" h6 }, o: |
* m) R: ^$ y" P+ e
printk(KERN_INFO "LED unregister!\n");
- ], l' O8 {. m9 i}/ G. z8 p! d# P' s2 \7 o
' R8 g) A% v4 Z/ _2 amodule_init(led_platform_init);, V, m' h+ L2 w+ j, A" L$ @% b
module_exit(led_platform_exit);
! j% X2 u! F3 D. n. q& Y" @9 M' N3 u1 k9 p6 T/ ]
MODULE_DESCRIPTION("Led platform driver");
! D2 A3 z+ y' yMODULE_AUTHOR("Tronlong");$ V/ ? o, ~- v; E c
MODULE_LICENSE("GPL");
# \4 E7 S- j# ^( @) C' ]
9 _! n; J9 t+ H( u5 s7 D. X |
|