|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! X. Y1 p0 t% I1 A#include <linux/init.h>
) u" u' A G7 h+ `#include <linux/module.h># A; V+ J/ G0 G/ U+ C" s
#include <linux/kernel.h>+ m3 B: {) c( E% i. m
#include <linux/types.h>
9 w0 a9 P7 K/ j) ~#include <linux/gpio.h>) K1 L% F& H1 {/ C1 j" }6 H: M0 ^3 r2 `
#include <linux/leds.h>" ]* b, d; Y2 D. X2 U+ I' _% h
#include <linux/platform_device.h>
) O. \: l V' V" t( ~
0 E- b1 A! Z+ r3 }* S4 v3 j& C#include <asm/mach-types.h>- O0 h5 ~( R/ D3 I6 \
#include <asm/mach/arch.h>" h7 m5 w/ f# Y% w) Z
#include <mach/da8xx.h>' v# j, B3 U: F! i0 Z
#include <mach/mux.h>9 p& t* o$ R* f
$ y. v. [2 L- | N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* g& P. l5 q+ R6 u& _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ t: j6 h2 e; S( ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& Q0 e1 z* ?$ N5 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 \# M+ f. g; r0 N
; y4 W* |! o0 q
/* assign the tl som board LED-GPIOs*/
, Q& `8 ], {1 m$ H7 ^1 b/ Gstatic const short da850_evm_tl_user_led_pins[] = {
- D( ]+ K4 ^1 G5 m5 U /* These pins are definition at <mach/mux.h> file */' m1 L3 ?6 s5 w& Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% P3 a( w4 y+ h1 n8 | -1
: N6 Y! g8 s" [# |, @4 h' W8 i0 n9 n};0 Z2 F7 N( ]0 V
9 _8 _9 ?+ i9 ?3 b5 E/ ^
static struct gpio_led da850_evm_tl_leds[] = {6 w! z' ~, @+ R1 `; N
{
3 u7 U$ ?. }6 b4 e8 D .active_low = 0,, A- L1 ^* K% u) n6 q
.gpio = DA850_USER_LED0,' ~3 Z3 r8 Z( J( z* C* y ]/ \
.name = "user_led0",
: o* S p. R3 h$ j2 w; @0 k$ K .default_trigger = "default-on",
4 X) a' e, Y: k+ z/ ~7 r },
9 m, |0 ^' f8 C r- V {6 o% T: V! G1 T0 {
.active_low = 0,
$ p7 _( D/ z# G) S0 N/ k$ g .gpio = DA850_USER_LED1,# S! R. A* Q+ M3 E, y
.name = "user_led1",
2 I A8 u9 n! v* D1 n" k .default_trigger = "default-on",, C9 h# |1 T7 L6 d3 D4 x
},
0 h& X$ S9 t% ?, h { O; |0 _- @/ p0 i; U& W0 D
.active_low = 0,6 P$ R Q) l# M, J) Z A6 N
.gpio = DA850_USER_LED2,
% [( J w3 n( X" y, e# E0 T .name = "user_led2",3 j$ w9 s0 I, S% F6 v
.default_trigger = "default-on",
g6 F3 u, v b8 H, `# L+ w% f },
& n4 ]0 j5 L2 F' _ { \( r: {* T6 `# N# ]
.active_low = 0,
E1 Q C* i7 y- E .gpio = DA850_USER_LED3,
j% l1 k( J. K0 Q) x2 x$ V7 J .name = "user_led3",1 q+ g8 u8 }* M+ y/ M- {
.default_trigger = "default-on"," Y/ V% [; X0 X! }+ y1 v
},
" e$ n1 L% T* N2 s2 x3 J/ r};7 K) Z8 z8 u" T' T7 g
3 m' C- z" }$ f" [+ d) A" \' ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, a2 o: X3 \/ h6 t' U. T$ H .leds = da850_evm_tl_leds,
& r, X B" L! t7 }% p4 W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ F7 p( F4 c/ u2 L' z
};" p/ J. M9 k6 [" I
0 \0 {' t c2 r8 ^* f# qstatic void led_dev_release(struct device *dev)
& N# Q6 ?2 F6 `3 D7 F h$ Y: _{
0 R' [1 g! q' V3 K( J# {) p F};
0 i$ c/ \# o; z3 k/ X1 i6 Z1 Q1 e ?
static struct platform_device da850_evm_tl_leds_device = {
& P& e7 H$ R% D ~0 z' M( n .name = "leds-gpio",
9 G, a& ?8 A% b& U3 |+ { .id = 1,1 k) _/ y/ m/ \ [& o h8 k
.dev = {
) x4 H- V/ y1 x; g9 m .platform_data = &da850_evm_tl_leds_pdata,
7 ~( d: S4 i7 P; X7 W* i .release = led_dev_release,
% i9 I5 `. v4 d1 |9 A }* M R/ f3 b+ C- r- Y$ G
};
; j" H( A9 ?3 u3 A8 ?! `
' ^: T+ J, M% C1 Kstatic int __init led_platform_init(void)
4 R+ p2 J7 b6 x* J; F! M{
3 M0 v- ?2 G4 e( t* ^! y int ret;
! G# k5 N' q$ Y5 G4 g) C/ f#if 0) m1 ]9 E! S3 R5 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 c3 a7 K" z2 P2 i
if (ret)& a. \3 W# b6 L! L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 m* t6 P( u& K8 i2 c6 {( N4 V2 K* n "%d\n", ret);; l2 W) S; H3 O+ u& T. X
#endif
6 B' _2 I( c, r+ |. C: S+ S- W ret = platform_device_register(&da850_evm_tl_leds_device);# l5 W; k2 W, k6 W$ @* p
if (ret)' o; Y" |1 X( K9 V% z! r" B9 i
pr_warning("Could not register som GPIO expander LEDS");
( o7 c8 [/ Q, d5 x" Q else
7 b( X# I: g, N" T5 g! ?: l printk(KERN_INFO "LED register sucessful!\n");0 S) a# d3 r1 J3 S, s# w8 J0 |) R
( ?2 s z0 K" q" @ ^: V! G" `
return ret;7 i: Y4 c G( y0 [" c' T
}
- ~0 O0 O1 F ?# B# c7 @5 b1 D
2 r; W- |% y. k. {: G; Fstatic void __exit led_platform_exit(void)! p' t# L. [# t. g( ]
{9 C' b% G, b9 [1 x$ q; b
platform_device_unregister(&da850_evm_tl_leds_device);
6 I; p0 l" w c4 J8 R8 i. N/ N M# t. l! ~* v' P9 M- m
printk(KERN_INFO "LED unregister!\n");1 `! ]4 o% j# \% D a: z3 w$ C
}; r/ C7 k, j1 f& M( W
/ n q0 i3 ]# {* @$ C- h5 d5 gmodule_init(led_platform_init);
/ S E4 G: Z, s u% f' s9 @# Hmodule_exit(led_platform_exit);: i2 A3 @! q, \# p
. q& U1 f; M. N3 J
MODULE_DESCRIPTION("Led platform driver");+ Q9 H* T& l9 r- r& a) I, I m% q
MODULE_AUTHOR("Tronlong");0 r/ r; C5 k) x9 y, i* j
MODULE_LICENSE("GPL");: J6 H6 ?6 G; f# V
* ]$ r+ o. D( S. f. G
|
|