|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ D" o/ J7 @4 q; e#include <linux/init.h>: C; c1 P( z! q2 \8 {3 @
#include <linux/module.h>
4 E' f* n. [. U& v#include <linux/kernel.h>6 ^; `2 e! l, j' v2 ^2 }0 {
#include <linux/types.h>+ U# @4 w3 W% E: b, |, U
#include <linux/gpio.h>
4 v" ~# z! l5 u, D' T7 \#include <linux/leds.h>
2 ~+ U9 u; ?$ g4 E5 k/ b#include <linux/platform_device.h>
7 L8 E& W/ q& r5 c- T3 u1 q3 o& ?/ ]. d b% B3 C8 J
#include <asm/mach-types.h>1 i6 Z G+ A% X. S
#include <asm/mach/arch.h>
* \# A8 D" T# D' {+ i#include <mach/da8xx.h>% U! D+ m! X7 M% m
#include <mach/mux.h>
3 Z6 ~, @/ J& O- r* ?. L+ h2 `; B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 \) C. N( M% ?% p3 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 u& ]4 ]7 x1 x8 C) ]/ @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, Y3 J: ?' m. z& ^, i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# D9 K) o+ v& u# J
( ~' D1 V5 j& c' Y8 x8 Z/* assign the tl som board LED-GPIOs*/
$ G+ T) u% z- Lstatic const short da850_evm_tl_user_led_pins[] = {
! f" Y, J7 U" f8 U' l" ^4 G% ^ /* These pins are definition at <mach/mux.h> file */
5 c; k6 Y2 F6 a* c6 n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 x' P. S& s% q8 l/ n4 c; ^7 ~ -1/ I7 Q3 `, m! @ N1 ]/ \
};% Q9 Q: f7 ? Y4 |
8 K! v1 x! T2 F0 j- O) d9 Sstatic struct gpio_led da850_evm_tl_leds[] = {# p. o1 H: B1 n1 z" }: y
{. f7 o. z8 }% {( b2 k$ W" J# f
.active_low = 0," [ }) ?4 h/ }
.gpio = DA850_USER_LED0,2 a/ O0 X; N; {( g* j3 s: g$ `
.name = "user_led0",* f& O; l# D7 O# X" m+ R# b" h
.default_trigger = "default-on",* q3 v3 [8 _) ^' J( T
},. w8 d/ Q4 ]) l1 `
{; I8 V0 d; u/ D/ ?! ]9 O; e
.active_low = 0,- c |" L+ B# P& N7 E; x
.gpio = DA850_USER_LED1,
/ I) r" O A9 L3 o8 h8 E3 V .name = "user_led1",4 B( d3 { }; M/ U7 [
.default_trigger = "default-on",' {4 j( ?5 p0 W2 M) a
},, r/ n. K9 R* R9 v- }/ W
{
9 w+ [4 B% F4 p- t5 S .active_low = 0,( X! t# i8 r9 x2 u
.gpio = DA850_USER_LED2,0 g) E+ n" L2 r, x5 ^; {$ ~
.name = "user_led2",' Z2 g0 L; I7 v) \
.default_trigger = "default-on",
2 g" w" Q' G! ~" t' `: y },1 t5 A* A! {0 Q r$ D6 {
{
( r$ p% Q3 P$ A0 `' a .active_low = 0," q) _ {( ^4 b, \! v6 ?
.gpio = DA850_USER_LED3,
* e0 V/ G$ t% n8 B) S! _ .name = "user_led3",0 ~3 Q+ V. y' C7 n, J9 p
.default_trigger = "default-on",
6 [ |+ e; a" L$ K; w2 O },: K6 @' e0 f! w
};( G3 G2 k& Z3 ?& z7 [; Q5 u6 q
, l+ u; i) s; a3 E$ t! n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 \) I" o5 O% N3 R) u
.leds = da850_evm_tl_leds,, C/ @- ^0 ?; W6 }5 A O- N" _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 b b( `/ O4 x4 x7 G
};9 Q& W N. a) L( n: F8 J
) D! E+ E4 ` \4 x
static void led_dev_release(struct device *dev)5 ^: Q/ [1 m" \( E6 r
{) Y( [6 }+ e9 P! l b* Y
};
7 l2 _5 u- C- p/ z# P8 S8 X9 u
9 y7 R5 Q8 Y0 C9 B( e. |" k+ hstatic struct platform_device da850_evm_tl_leds_device = {
/ U& h. m& F. o N, D& r1 Q .name = "leds-gpio",# c, G: F& }- [
.id = 1,1 h$ f4 Z: \4 g9 w2 P% q
.dev = {9 h4 t8 e& f2 L2 p( e' |
.platform_data = &da850_evm_tl_leds_pdata,, @9 b6 o& C {, w
.release = led_dev_release,7 f! @% p3 C5 {
}
1 K* o# s2 I3 G( n4 @( H R" q};" w4 ^: V4 M. p0 C( `
9 z* V1 w$ P8 |; w
static int __init led_platform_init(void)
, Z4 r1 c% R* ~8 ^/ C6 ]# w{9 N: K( a+ a6 w" j$ `
int ret;
3 v5 k- R- p# ^- v/ X#if 07 Z5 L& f; P1 z8 e. }# H! U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' K) S8 i. |7 A( Y if (ret)
; t* z$ C+ m- ?+ x. d* }. L, g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ d/ ?1 o! N, h, t1 X n- C "%d\n", ret);
* m3 R+ G5 i) ~3 Y' S+ |4 T#endif
" M9 _6 M, ~) y: \ ret = platform_device_register(&da850_evm_tl_leds_device);% ?2 w& D0 `/ A+ B
if (ret)! P j8 P( q& I6 }0 M
pr_warning("Could not register som GPIO expander LEDS");
. M3 |* j) R- I else
! g/ z, F' q4 K$ b printk(KERN_INFO "LED register sucessful!\n");7 D; b, e8 u0 `4 X' K3 W
$ }6 R( {/ z$ ~7 P5 a( i return ret;. Q1 }7 l9 y; u i% M
}/ G& c6 Q5 _7 [1 [0 i: o/ t
- R/ W# d Y+ V9 L$ J+ }+ r
static void __exit led_platform_exit(void)
) L/ h& R, Z. k{
& }0 x9 j( x4 W# @& q platform_device_unregister(&da850_evm_tl_leds_device);
3 Y8 p7 a& H+ p, x2 I( q
- ]" f( O" _& h! o printk(KERN_INFO "LED unregister!\n");
/ C( Q6 [2 |! W8 i6 D" F}
4 v( G: s! n( z E' h# @3 s5 m+ S: X
) j6 A$ \9 O7 z+ u$ Jmodule_init(led_platform_init);
0 R4 `& }# H; ^/ A* R- Y$ Ymodule_exit(led_platform_exit);
" T" U! d6 t' F' X1 Q# ~. A! z4 C
$ X2 R' d. g7 n6 _% r& a% xMODULE_DESCRIPTION("Led platform driver");( |% n5 r# k8 X! }4 J
MODULE_AUTHOR("Tronlong");
9 f% |/ C$ Q/ E% s$ s( z/ qMODULE_LICENSE("GPL");5 S# x: Y2 R+ f$ w: O
4 z% ^, w5 k0 j* R9 T
|
|