|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ Y" f, O- Q. h- y/ r
#include <linux/init.h>4 F: I s5 F, I9 g& N8 B* b, K0 `7 K
#include <linux/module.h>
. D* S! o [" F; K8 `#include <linux/kernel.h> I! y6 _+ j2 N8 }. n
#include <linux/types.h>
4 C) t8 |) y% I0 l2 [4 k. Z#include <linux/gpio.h>
" S* o: W" U9 _( @, Q#include <linux/leds.h>9 r$ I. {) e3 o, E( T& Q0 Y; p" P
#include <linux/platform_device.h>) m- J$ \& k1 R: T, I0 g
, L6 _4 d$ u- M" M
#include <asm/mach-types.h>
9 R; n# D$ {6 T: g" _, I @5 V#include <asm/mach/arch.h>
: z; i$ V) ~( q+ }#include <mach/da8xx.h>$ [! I; o% h# T# ?7 M3 `
#include <mach/mux.h>
6 A' b+ S9 z% C5 d- u
/ @4 K; |1 @- I& w; E& H* u. g1 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( `. P4 x% S D2 A6 I3 ? E* L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* U; ^: l( K# d% N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. Q( J3 M* _3 p6 t5 @' ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ~" w* m' Q, Z: W7 s9 d/ x9 ]
s- [. w5 K! C) [/* assign the tl som board LED-GPIOs*/
: n1 U8 k) Z- ?5 s/ K8 _0 ostatic const short da850_evm_tl_user_led_pins[] = {4 Q' D' N0 ]* s" R7 g
/* These pins are definition at <mach/mux.h> file */( L! d% i \7 U1 l. S2 i( J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" n+ K2 B8 d, o9 Q# n -1- i6 X9 m2 ^' O/ z( I/ {5 V3 G( U
};
, l3 r! [& K+ L9 S
. ?# U& p# U: y9 e. Vstatic struct gpio_led da850_evm_tl_leds[] = {0 l$ O. y! G) [$ _$ \8 z
{
) o( E) o" Q( q" C# f. b .active_low = 0,6 h6 r, m- I; T6 e5 O
.gpio = DA850_USER_LED0,
5 s0 `- E, O: K7 I4 H& w3 t. d .name = "user_led0",% s1 L* Z1 e7 q8 J, o
.default_trigger = "default-on",* B: k3 z h$ v% i, T# G7 S) o
},: J$ b8 P. N" _1 A" L: _
{
& J4 e. H) e5 U& x* x- P0 s+ @* | .active_low = 0,
& o9 f/ [; N( }; R" L/ v .gpio = DA850_USER_LED1,
8 \! ^3 n+ A+ X' Y6 T7 B6 T .name = "user_led1",
4 L0 Q( k% v& ?1 W3 P: y% N- l .default_trigger = "default-on",
7 u+ U! v; f" \ },/ y5 `5 y. ~0 w2 P
{0 U* r8 V3 L, j% e+ i) z+ O& W
.active_low = 0,
5 p9 w& u7 { B2 M .gpio = DA850_USER_LED2,
( l" G# F2 o; j! K .name = "user_led2",
5 f- p- r; u" H7 A& W0 | .default_trigger = "default-on",
% Z! G, u9 u; s6 E }, K' ^$ o3 A# x+ f" ]0 x. R9 S
{0 H/ ~0 a% F g2 o. c
.active_low = 0,# a, o$ i4 I$ X6 r
.gpio = DA850_USER_LED3,
+ `# b2 _! _- [. @ .name = "user_led3",
0 ]. q- {$ {+ l' P .default_trigger = "default-on",, o k, v2 t; f9 A
},
* D( E L! Q2 @; I};
w% ^7 T& M" i4 j/ `
8 G% ~3 [0 e. P9 T( P, ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& j8 r* |! b" K" m .leds = da850_evm_tl_leds,
8 c- l ?! m4 B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* l$ ~) _( A# D; h) I/ A3 k
};, }8 U3 D9 V. I- b
& ~ g. I3 k7 J/ x7 I O8 lstatic void led_dev_release(struct device *dev)$ {! f- _0 L3 r. s7 R
{7 v& K9 A, t* w9 r
};
! k, j9 f9 b; V. T( A# V* U: |1 ?9 J U( V+ p3 a
static struct platform_device da850_evm_tl_leds_device = {. ~6 C( ~$ C& Z4 f7 R4 u# j3 Y# P
.name = "leds-gpio",5 _, @. P$ {8 _& y/ }$ z
.id = 1,
! [2 o5 t. m8 n6 C9 n) s3 l .dev = {
C% ^' {& X8 F! O6 t! P9 L5 F; @ .platform_data = &da850_evm_tl_leds_pdata,
4 W1 X g* p. o! k: C7 ]$ _ .release = led_dev_release,
/ q; r3 Y9 Z: \: k# l/ K! \ }) y0 A9 R3 J4 i" \; |0 O5 [; }
};
* P. s$ J0 ~- `$ b3 G
" m9 e' g; q* v& w3 ~6 j% tstatic int __init led_platform_init(void)8 o" G4 G# l, u9 T- Z( A, a
{
/ ?/ @- \" i; ~/ r$ A0 _' q/ U int ret;: b6 J. v' X g* U: L+ ^
#if 0
7 n- @7 r- w$ q3 T3 |9 j) m/ K( Q9 D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! J. b# ^9 [2 A9 z2 S" J; @: o if (ret)5 W" Y7 g# R3 Y; L0 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 {/ q. b4 f0 `2 n/ I "%d\n", ret);- S3 u2 |+ i5 d- f. d1 L& ?
#endif. X1 Z! p+ n" N6 H6 f" w# _
ret = platform_device_register(&da850_evm_tl_leds_device);7 O8 v6 o0 O+ C8 L( @ h9 y
if (ret)
% z F) d! O, r8 d& l7 h! h) H pr_warning("Could not register som GPIO expander LEDS");
. e: B, B) S2 a3 ?0 G3 @ else9 ^3 ^$ s! W- j/ E6 D5 [$ C
printk(KERN_INFO "LED register sucessful!\n");
+ V3 B9 R4 n( B' [2 w5 c4 ]* X9 X' k5 x: O+ b z
return ret;
0 O+ a% N4 i& `( x" g* V}
4 @# l# L& Q$ A' a1 b$ m+ |9 {9 k: a. I4 T( A
static void __exit led_platform_exit(void)! X2 }3 K" O5 ?: u7 q
{
+ `* Q$ ?: v( q' H+ z platform_device_unregister(&da850_evm_tl_leds_device);
( Y E5 E; }) t' s: ]( k* p8 C" X- L' t
printk(KERN_INFO "LED unregister!\n");5 ?4 q9 N# l0 C
}3 q3 E, s' Q7 P
7 V8 R( M6 a8 y0 `2 gmodule_init(led_platform_init);$ p# k8 F L" |
module_exit(led_platform_exit);* G ^9 A' m. f9 O3 H' A- S
" h3 Q% o8 o5 R0 {
MODULE_DESCRIPTION("Led platform driver");
3 q, `, s- ]" v9 H- b- ]MODULE_AUTHOR("Tronlong");7 ?- H( N- T+ o! j0 u8 f- O; t
MODULE_LICENSE("GPL");
$ j, E* |7 [( A3 N3 D$ K# k2 z/ \0 r1 {5 f% [8 l5 L/ y
|
|