|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 f( r9 }; L0 E$ P' P- u
#include <linux/init.h>% u2 ?3 [: U4 _4 X
#include <linux/module.h>0 e# I( Y# l# ]8 L2 l3 N5 I1 m
#include <linux/kernel.h>
4 |: R* t4 S) T0 `* z#include <linux/types.h> N# Z/ ~! R* |
#include <linux/gpio.h>
6 i& `7 j" \/ \3 x#include <linux/leds.h>
5 g2 ]" m" y! f, p8 X3 ~! t% s. J#include <linux/platform_device.h>$ e/ N" u3 z+ ^1 y7 g
3 B: B3 I) C% Z; X#include <asm/mach-types.h>) }( ^+ X- R* H- C3 Q3 O9 M! ?; e
#include <asm/mach/arch.h>, s( }. m/ @/ E- k8 P& W( Q) J
#include <mach/da8xx.h>) E3 }1 Q6 N9 K# I1 w9 E* d$ T- |8 H
#include <mach/mux.h>* A! @) s2 w# g8 @, X
. g. r( g- R4 C( j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 {( x" {4 a* G: l! E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- A& x m3 r4 y1 l# r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) W! F m/ t- g, Q3 H7 B9 m9 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# e/ t8 w/ R$ `( H1 ?! w
. q: j( @( H9 W {3 O; J; k/* assign the tl som board LED-GPIOs*/
: \$ N2 E3 x6 L' m7 @' u3 j I% @% mstatic const short da850_evm_tl_user_led_pins[] = {! c2 \) F- @+ s- M- i
/* These pins are definition at <mach/mux.h> file */
0 A( `& f* P( o+ C1 {% ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( |, q6 W4 M% V9 E
-1
u: Y$ E2 i% ]' s! h% q};6 M; x) _ E& q
, |- |. g, o8 W4 }, g9 o+ E2 Y
static struct gpio_led da850_evm_tl_leds[] = {& [1 k% ^! g' Z3 P0 \
{
v* ?8 J3 E1 v .active_low = 0,
# X- L+ |6 s+ C9 o! V# J. P3 w8 x5 P .gpio = DA850_USER_LED0,' `% d4 e# K# |. E0 c% [
.name = "user_led0",' I; |2 y$ y( L: L6 ~3 T
.default_trigger = "default-on",
3 }' V# |# s4 A4 S! j/ N$ b: W },6 F; F! R- m W* l
{
- L% ]/ D$ s1 w' U4 a' i0 P" k .active_low = 0,
0 U6 a x, p. Z .gpio = DA850_USER_LED1,
& r5 I$ ~1 l& G* h .name = "user_led1",
8 n( ~) ~) ^4 B- U8 u .default_trigger = "default-on",
7 f2 p: f7 M3 j2 ~8 X$ i },/ h3 b A# F$ C& y$ j6 p
{2 q, F5 f6 M- \; Z5 b
.active_low = 0,
! c+ b7 o, Y4 ~2 K( Q- s3 W5 l$ ? .gpio = DA850_USER_LED2,8 V* r/ v Q; i
.name = "user_led2",
* M) U$ k) r* i' E* F9 ^4 L .default_trigger = "default-on",6 [- _) i! ?$ R( l3 {; M
},
1 S: E7 o* V5 b K2 h' c; C( }4 H9 m- e {! ~8 Y! f. f* n" _9 `. E
.active_low = 0,
9 S0 [# C4 t# G .gpio = DA850_USER_LED3,
3 m: z3 a; F: t8 W3 k" r# a .name = "user_led3",
2 o; u4 i; E) `, c! Y3 P2 e .default_trigger = "default-on",# L2 K5 U, A7 u3 T; \
},
5 P9 G4 n; q; e* \+ X};0 l& w3 ]; {/ Q4 t
5 p4 G0 @. D# i9 X- ?. O, ?, b! estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, ^! T; Q: H9 n* `& _) R/ Y
.leds = da850_evm_tl_leds,: F, p, t# z; l7 j/ o2 z, W m d4 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( n$ A; S0 S6 e# I& \& S! S};) i6 N* ?0 m4 [1 S; o' w
$ P9 R- `' E7 Z: h7 t
static void led_dev_release(struct device *dev)) N$ h( r; b1 x: B
{
8 T8 u. A K9 s1 {! r};
4 V( B' o% L. n( m: P
: K8 i/ X1 K+ ^6 M# n8 Y) e% a: Cstatic struct platform_device da850_evm_tl_leds_device = {
, Y3 C6 f% L+ L' t .name = "leds-gpio",9 ^ a$ |9 @ c9 ]9 @7 ]
.id = 1,
/ A6 S* t" [+ b' Y' Z" c* k .dev = {7 F3 z$ ?; q; v, ~$ X- o
.platform_data = &da850_evm_tl_leds_pdata,8 O; ~( h, }$ X7 P$ C7 i. X3 \" s" e
.release = led_dev_release,# F; c8 y. k. H; E, F
}
0 l2 x' @' `3 C};
/ D& f6 g# W0 F! C3 v* j* `2 G7 F1 K+ a" W: J$ Z
static int __init led_platform_init(void)
( D# e+ j; C2 Z: c4 Q! a$ ]1 T{
v$ T: P2 l" H' t' `* ?% J! ?) C6 I int ret;
5 M$ @% R H0 l2 s: U5 F7 o- q& l2 b#if 0
8 t$ V3 l I" d, u0 A+ o$ c6 q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# s8 [! h4 G' y3 n if (ret)
& J7 k9 o" D z% X0 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 ]' b: z0 s0 k; K "%d\n", ret);
$ r9 _8 G# m( v8 x2 B; @#endif
1 \/ T# [9 f9 n; ?: W3 X ret = platform_device_register(&da850_evm_tl_leds_device);
$ w; d d: h4 p$ t5 e if (ret)
, }2 y: _) n% d- ^; \ pr_warning("Could not register som GPIO expander LEDS");+ a5 Y ? K% p8 e w" D
else
9 \! X! l& T) a6 R printk(KERN_INFO "LED register sucessful!\n");
1 e' R$ G9 E$ h, s N4 Z3 b l
0 ]1 g' E1 i# L* l- a. H return ret;" }4 x# r' Z( G; ^% G, x
}) j8 Y# Q& L1 |' e' m
9 I! ]+ g) p: o
static void __exit led_platform_exit(void)
( `" c' x: V& P$ o{. a9 q& O( Q$ z2 M+ a6 i
platform_device_unregister(&da850_evm_tl_leds_device);
9 W3 j6 g3 z; X7 p: J) X& s/ d3 k0 R2 X& K
printk(KERN_INFO "LED unregister!\n");5 q6 Y% K' C* b; v" p
}. S) F5 r5 d S, \9 @7 g/ h/ G
" N+ k) [9 e4 p" M2 a8 P0 Q- X- `module_init(led_platform_init);
1 e" W- w) u6 a& Bmodule_exit(led_platform_exit);
) G# {" `" O: y& v$ a% l
7 q* [" D, Z& Y6 e4 kMODULE_DESCRIPTION("Led platform driver");
( L. H* L1 J' S5 Q8 s- JMODULE_AUTHOR("Tronlong");6 K* [% s4 F' [6 {1 z2 Y& E- o
MODULE_LICENSE("GPL");
. o' H1 q& Q' c. u& z% j
, d% {! d' Q& o! Z, D4 ^$ s |
|