|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( E/ a" } c0 F9 w# |
#include <linux/init.h>
+ g- p7 k# R6 S) Z#include <linux/module.h>
2 X/ c( r! j2 h5 U* e#include <linux/kernel.h>
1 X7 S8 X! V! e T5 b9 ?; _3 W0 I#include <linux/types.h>
9 ]/ Q0 Y$ H G: e$ Y, I#include <linux/gpio.h>3 K, |. j: ^2 }$ V
#include <linux/leds.h>0 d0 e0 Z7 o4 M0 r2 d( p
#include <linux/platform_device.h>) i, ~! }( ]! n% d
6 ^' s3 v* ~2 f' ]0 x3 S#include <asm/mach-types.h>* E- E, d" I+ p! z/ S( h! ^
#include <asm/mach/arch.h>$ q7 k7 r F# K) i U- x
#include <mach/da8xx.h>( K$ h6 K: @3 k* F2 X0 B2 e; P
#include <mach/mux.h>: e' s( O0 i7 h: h, g9 C" y
6 g/ {" ^- b0 x. `0 B, N: H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 a4 j. T) a6 N; Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' R0 O. \5 }% O9 T+ F, {+ {, Z f [, J: t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" S# |0 x0 I, K: L# O+ ^9 I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 i* C6 W& [" K% U
9 k0 V( t- y2 G& c" x/* assign the tl som board LED-GPIOs*/
% M; d+ r7 r/ D8 `- @4 W. sstatic const short da850_evm_tl_user_led_pins[] = {
: `0 U6 X% S0 r' _2 f- h /* These pins are definition at <mach/mux.h> file */ J) c4 E. l! }2 k4 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! { U; \+ F2 M6 q$ E$ z/ e2 i
-1
% o. F* c9 u$ |! _0 A% v}; m. a! G4 _& Y( b/ B8 t3 u
! f% T; h7 N, a! V$ w
static struct gpio_led da850_evm_tl_leds[] = {
5 j. S9 h" d) n: X% I {
4 I$ I& V! O0 s' E7 o) ~" V) m: y" } .active_low = 0,
! W1 Z5 b9 ?0 x/ `5 V. d .gpio = DA850_USER_LED0,1 U; ^, W4 P2 [
.name = "user_led0",
# n8 x8 |% N7 b4 L7 H l; `) B8 e .default_trigger = "default-on",7 L/ X0 }) p ^5 r' C2 l: b
},
- d# e0 F' [, q% f {
; p* h2 r8 R: i# d .active_low = 0,
6 T& o9 w4 s( ^' U. r .gpio = DA850_USER_LED1,
& W2 a' s2 k" C/ r .name = "user_led1",7 f) H0 ~5 X! G: G
.default_trigger = "default-on",5 e% K2 J+ u% L$ O, d
},
1 C) b( y, B; X* R {5 O& E1 J; i, t: h- X
.active_low = 0,8 i3 f; ^( B/ s* M3 [# b$ g
.gpio = DA850_USER_LED2,
+ w+ \( C. a( j .name = "user_led2",
3 n# P% `2 I' q3 W3 { .default_trigger = "default-on",
4 O1 Z Z, X7 `5 U6 k* a },7 F. V* k3 g1 t- d$ j. q0 S
{, g; @ ?5 X4 y; x
.active_low = 0,0 @ t5 ^% J: a5 _; d
.gpio = DA850_USER_LED3,
/ E3 X8 a8 s. o' E& Y. w7 O6 N .name = "user_led3",0 U, I( \3 k3 A& s- n: E; P1 f
.default_trigger = "default-on",
. n! f. ^* c% ~& K1 o: f! h },
5 b, q$ I2 E/ R" u};
& c9 E1 O T( j. }1 }2 h/ U
3 R, p& R$ ^8 k2 ~: H- [& }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ W' k, x2 d" A. k, T4 }+ w
.leds = da850_evm_tl_leds,
# a2 D% ~4 a+ u7 I- H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; _: o4 @ s2 X( l: v' M& H
};* R# S6 D W+ A9 {$ @; i# M
; M- K6 P7 k$ v0 P
static void led_dev_release(struct device *dev) `. H1 w% m: k) \) O) Q3 f# h7 Q
{7 i7 F0 N5 Z B+ Z2 T
};
9 ~/ L! b. v; x* |' E; R( f# T
0 e! t# `2 `/ \- m9 f3 M1 Fstatic struct platform_device da850_evm_tl_leds_device = {: l) v. G& K9 i! F
.name = "leds-gpio",: f1 h0 e2 [4 U
.id = 1,
% p$ e8 \9 @7 [% O6 w) R3 {4 @ .dev = {
% D3 E8 h G) C& a .platform_data = &da850_evm_tl_leds_pdata,
* H7 W* Z$ L1 d0 r& \! e .release = led_dev_release,) O7 O/ ^. O( S
}
6 F8 l, \! P" s0 D* O};
% B0 ]7 w0 T" z
1 R" h6 r/ f8 l M( |static int __init led_platform_init(void)
; X' u- r* {3 ]# ?4 L! Q{
7 W1 x/ m$ k3 S$ O+ z int ret;
+ v) C; v4 Q3 M3 m) ~7 O#if 0! F d; A9 V1 z% }: @1 s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ `4 u" p4 Z6 u
if (ret)
1 ], f ]5 o- k0 e; X2 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 ~0 m. z' \6 Z$ X5 |) I "%d\n", ret);
* F) V* D/ p1 d8 n& D#endif
& N9 \1 p1 X5 v& x0 T: U6 K( } ret = platform_device_register(&da850_evm_tl_leds_device);
9 s4 s; p. W# w/ f: x: F/ @$ p6 W if (ret)$ j7 |7 q/ a7 Q w. L4 N3 J
pr_warning("Could not register som GPIO expander LEDS");
8 u7 i. N: \! a% }7 Q else$ {2 P& S8 }( j* _7 k* ?4 C- w
printk(KERN_INFO "LED register sucessful!\n"); H+ t9 Y9 [6 ^( x2 s+ z5 |
, a! Z j9 o5 j return ret;
) }1 M. E8 a5 k7 Q0 B* g8 U}9 g5 ]7 h4 w$ l4 n
6 ?+ K1 @, M2 V% d) v6 Q# tstatic void __exit led_platform_exit(void)& l1 z! K2 `1 v9 D: s
{/ ]- E6 R6 b$ A2 X0 Y( d d: k$ W" G
platform_device_unregister(&da850_evm_tl_leds_device);
8 N& ^- R& v7 P! B! `7 F/ m- C6 X5 Q0 K: @( V1 }, @5 j
printk(KERN_INFO "LED unregister!\n");: {, w& p) z8 C1 r7 t; i
}8 v+ t, q6 q& z
' O" g6 u# V3 y2 A1 k" l; c" \, G
module_init(led_platform_init);
0 q$ S' ^# T# e3 c6 h; amodule_exit(led_platform_exit);. T$ n3 H( m+ P; o }7 y3 b m# K3 s% @
' o6 [0 o! _9 k% wMODULE_DESCRIPTION("Led platform driver");
, B3 |9 j# c' v3 [& _- V( XMODULE_AUTHOR("Tronlong");
4 F& U8 S* j) k- R; `$ tMODULE_LICENSE("GPL");
# ?# Q4 @5 b7 B1 d9 x: q4 ~! b) k1 d+ L) I8 C
|
|