|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 @9 l. l0 U, C3 c3 G/ S#include <linux/init.h>
- M W% o0 f/ E- ~+ M0 Z/ S#include <linux/module.h>* S, d) I7 z. B
#include <linux/kernel.h>( j8 B5 a& S+ M7 V0 h& P
#include <linux/types.h>8 ~7 S5 ?7 Y9 z- D
#include <linux/gpio.h>0 Z- _, K) K1 I' q* l# W$ {' U
#include <linux/leds.h>% \: q+ a& f2 y) e5 m N! W
#include <linux/platform_device.h>
( {9 w& m5 Z+ Z
: V3 D }& y( a#include <asm/mach-types.h>) g& B v2 U# A, x, ?) F" s; l
#include <asm/mach/arch.h>" r# x: i F4 P, u
#include <mach/da8xx.h>! V5 P$ Z T( ^/ R4 R- a/ [
#include <mach/mux.h>
# N4 |7 i: Z& W/ X. P% v
: G# i/ |8 m4 X0 k+ `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ |- V$ S9 V- z7 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" m2 A3 [7 B; o" \, `4 M3 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 i9 [. v k4 F* _6 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! g' N! v; V3 q
: _. u; N2 d, ?! T& O9 c3 N/* assign the tl som board LED-GPIOs*/3 p$ x1 V! k* x) [7 n
static const short da850_evm_tl_user_led_pins[] = {: ]% H9 U9 X: R" n- O& |# @6 D' O5 a
/* These pins are definition at <mach/mux.h> file */
, m r4 u. R' N" ], w& \$ Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- G# \$ o* _2 M6 U4 q% f) Q2 } -18 b$ y6 k/ ~3 l1 l I
};7 N9 K5 g/ S1 {" l5 m3 x7 G
) B+ X7 ?5 w/ P$ l7 V
static struct gpio_led da850_evm_tl_leds[] = {1 ^9 U( P/ n% N2 F! C8 D8 U+ k
{+ o7 r) ^! F# j/ i$ l- z1 u
.active_low = 0,/ |4 n+ M, D6 ]% u+ G. p3 i1 ^! Q
.gpio = DA850_USER_LED0,8 t' Z6 ]7 X& X- C: E
.name = "user_led0",
2 b2 U& p4 W1 n .default_trigger = "default-on",8 {! ~4 Z0 M. W0 \. u s: ?
},
6 }( S- q0 f. X9 u' Z- A {
3 A8 W3 z9 F3 ~. ? f; i. h" c .active_low = 0,
_) ^% _( S2 j9 e/ D( }$ O2 N0 ~ .gpio = DA850_USER_LED1,
( e7 c0 r, u! Y .name = "user_led1",+ [9 [: b- f' C( e+ c# P
.default_trigger = "default-on",1 J2 u8 k$ t7 t% a4 V
},
0 v2 W, P5 S" V' C: L {
4 f! v8 m M# r) `# r .active_low = 0,
" f! R. M+ u- g+ A w9 M2 ^ .gpio = DA850_USER_LED2,) d7 m+ [$ G: h. j4 N
.name = "user_led2",0 P5 }! E; h7 W& A
.default_trigger = "default-on",
6 r* M5 b1 B" q },
2 ]' C6 O6 G0 A* n {
' } [8 i! N/ k* i7 k .active_low = 0,
) U2 X. k6 W3 y .gpio = DA850_USER_LED3,
0 {" H4 \, X! x/ ?" M/ ^ .name = "user_led3",& H% K1 J3 E$ I! E! x
.default_trigger = "default-on",- M7 w" M3 @+ d
},
% t0 n5 {; T/ }+ l9 r};- |* c D, r; d; C0 V3 X+ R
3 f6 D( u4 z: N( T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 n) C' `) P3 L; G
.leds = da850_evm_tl_leds,
' ?) |" [' L7 q/ S( B& i. X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ w9 m" N6 }2 Z& T};
/ C! D; d, a. D( G, z( N: H$ ?& h' \1 T# B' F, M9 q. v
static void led_dev_release(struct device *dev)
* F& m. c+ ^' a7 |0 o3 ?6 F0 z* |/ |{. z; B/ u# d" m
};
" ]" x( w9 Q, U6 v1 M. o2 L3 o* V4 j% U
static struct platform_device da850_evm_tl_leds_device = {5 A4 ~ e7 U5 f5 w* i) G+ _
.name = "leds-gpio",
1 m$ [) @! S& i/ G6 U# ]" S .id = 1,
: @1 s$ P2 I2 G+ i .dev = {" O1 Y& y* b- ?5 [$ C6 g4 l( N. L
.platform_data = &da850_evm_tl_leds_pdata,- t' U/ K8 L8 j6 a3 l2 k
.release = led_dev_release,9 l! E3 X& C3 I( m& i
}9 X+ D5 G, K$ Q, n7 E" c
};6 b" o( t% ]; g) e7 d
' N7 `7 q2 ]# F
static int __init led_platform_init(void)
# E& h W$ A& d% T" g6 ]" d{1 U6 q5 x# A8 L+ r
int ret;/ p: Q& D) g' S
#if 0
: v, V5 {9 y8 x' R! s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); Q- o( `) E- v# c+ e; Y2 b7 a- S
if (ret)
2 D* ~! c7 f, Q: n0 B3 z# Y5 q8 } pr_warning("da850_evm_tl_leds_init : User LED mux failed :", C4 |+ D& p& |& H9 n
"%d\n", ret);1 v/ @/ x4 O# H
#endif
0 t. Y: q& L: q# `0 x7 _ ret = platform_device_register(&da850_evm_tl_leds_device);
7 }# N [- K3 ^* U if (ret)- }3 p+ h/ U. O/ ?' ?, l, Q
pr_warning("Could not register som GPIO expander LEDS");6 j* Z7 u8 D0 |* x, L
else* m* I" p0 [/ g& }( l/ z
printk(KERN_INFO "LED register sucessful!\n");# z2 Q8 R' w' F- E/ h9 W* p6 n
1 D$ Z4 o: [$ ^/ c B7 h% [" \( s
return ret;3 s( M9 H* i: e9 s9 e: z
}
, ?* i* r- i/ J) |4 m' c/ z
7 d/ C/ ^; S7 m( y, D; S1 kstatic void __exit led_platform_exit(void)
: r, a( b( j* J; {" U6 p6 ^{
: I' L; j6 v6 g- I0 S, t platform_device_unregister(&da850_evm_tl_leds_device);
* V i% Q8 s4 @) _: ?4 ?, R) Z0 N! Q7 A# Y
printk(KERN_INFO "LED unregister!\n");9 a) o) e$ O/ f, h9 v2 Q" X
}
# Y7 B6 v& {* ~9 L7 T1 K1 b8 a8 O# d9 H5 d/ j) B- W+ U
module_init(led_platform_init);
" x$ S% v m( a6 n0 {module_exit(led_platform_exit);, ~' e. c9 c* }; D
+ A" w; E( _( c q: R- ~% K
MODULE_DESCRIPTION("Led platform driver");
6 @+ L; i" u3 r/ jMODULE_AUTHOR("Tronlong");
7 F# z" M/ A7 F" w; uMODULE_LICENSE("GPL");
7 t# q2 n8 \7 D! F% V1 c: n1 G4 e; L8 R1 H6 f( y- C h) [
|
|