|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 u5 ? _# M5 d0 r: V6 p+ s
#include <linux/init.h>1 h5 {; j! `0 ^& ~
#include <linux/module.h>
0 x6 N' d8 u: D3 }#include <linux/kernel.h>
1 A9 o9 X' p; u" b5 y f: i- r8 Q#include <linux/types.h>; \( h+ z/ I h$ n
#include <linux/gpio.h>
2 M9 E- E$ o$ n# J) N#include <linux/leds.h>
7 t* }6 Q+ [* Q( e8 N#include <linux/platform_device.h>
) M+ `9 c' e6 ~* L6 Z- F1 g# l+ v" m
#include <asm/mach-types.h>6 b( w5 l, E6 s, ?& @2 w
#include <asm/mach/arch.h>: J1 Z7 G1 M9 E
#include <mach/da8xx.h>2 m) W7 \) P! n1 [" i# g" s
#include <mach/mux.h>' e t5 c1 `9 w. `
- K/ |/ Q. A8 }( H3 o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" O9 V% b8 Q2 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( J+ D V7 ]9 `1 Y0 o: U) k n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, Q! X% b1 C* {0 I7 l4 o1 l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 Q! U) p5 ~8 F8 }2 d! T, {6 _
. X9 g; r+ U! s) k: M! K) r1 ^. Z/* assign the tl som board LED-GPIOs*/) {3 M# r/ C: L6 Z2 P
static const short da850_evm_tl_user_led_pins[] = {6 F4 L: P" l% [5 p
/* These pins are definition at <mach/mux.h> file */# M! t1 a) y% c! A6 W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 r) b( q3 B/ u9 g6 H* y" ?5 y
-1
, `; N6 q8 j: M6 m9 _! h$ m};
) z" @: _! G& A& |; N: f( n, \; O; t# [" v0 S7 }% e0 s G
static struct gpio_led da850_evm_tl_leds[] = {% X2 w% k/ L d1 O) i
{
2 X5 L% q4 \; v& S% t* Q, { .active_low = 0,
- Z% x# ^% @6 n6 H .gpio = DA850_USER_LED0,
1 f! j* D& d9 D$ a% K .name = "user_led0",% L* r* r e5 ~
.default_trigger = "default-on",
+ p+ e# `9 ~1 M k },
; S v9 y* ~% w2 m; u {
1 E5 }, p. a( U3 |6 X U0 d .active_low = 0,
# h A8 Y9 ]! l) n. P8 O0 E' S .gpio = DA850_USER_LED1,
4 s$ _4 o4 J. w" { @5 m5 r$ L( X2 F .name = "user_led1",! p3 d2 m4 }" U" m, G
.default_trigger = "default-on",
! z) i% d4 x' `/ ^% B) j3 L# w },8 Z1 k( r+ I% Q+ a$ H% J4 ]
{/ x; ~4 y0 s. D! d
.active_low = 0,
' N9 }" z& a& W .gpio = DA850_USER_LED2,
h, h6 O/ |; X .name = "user_led2",3 Y) k1 ~! H- I+ m# o/ H; U4 {
.default_trigger = "default-on",& x* S$ ] k& A0 h Q3 u
},
9 O4 r9 J0 `. T4 s: D$ _7 n {) w: S% G1 P4 r. B4 ^6 x7 F
.active_low = 0,
0 U$ v1 c8 y* o' F4 [& M1 e) I3 A .gpio = DA850_USER_LED3,, ~" J% b' X( B, x( j' u3 e
.name = "user_led3",
' X3 G5 [6 f0 k+ X .default_trigger = "default-on",$ G# E6 Z% X! k' a: c# I1 y8 C% t
},
; D8 L. `4 @% u d ?};
, B5 }4 l# v& ^6 W: Q) D5 T7 o& `- {, m3 B- L) s" o3 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. f0 J( G- Y! s( A8 J7 r) V$ F .leds = da850_evm_tl_leds,
" c$ `' j7 g4 R0 A. z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, {( w* U0 d. M" {9 M6 p1 Y5 O
};* U5 g: H1 D& ]. B
8 K" z0 y) q4 S5 J: }8 X# g
static void led_dev_release(struct device *dev)! e; H+ ?3 l' G- I! N. e
{- ~4 C4 h" v9 I: u6 E# C
};
0 H- E6 e) v9 r. v( K3 Y
3 Z% v" t# y& S; M8 n0 O7 E8 @static struct platform_device da850_evm_tl_leds_device = {
; G9 {" F5 {5 D1 i: m .name = "leds-gpio",
& o7 _, B+ }6 a4 \, ]) Q& E3 ^ .id = 1,5 a, R L7 h3 x5 ]
.dev = {, K6 t# g5 H1 w
.platform_data = &da850_evm_tl_leds_pdata,
1 Q. \! a; q! q& j5 i .release = led_dev_release,1 l' a% a# `8 |7 x8 |
}* n( M& F9 I! p* Q" I; i
};
7 e4 A9 u9 r4 f/ D% X- Z: i: H4 p4 A+ z' }* \5 d
static int __init led_platform_init(void)
: f4 {5 K" Z( s' Z. ]/ ~* C6 A2 Y{
' A# ]/ q6 p( Q' W int ret;% W4 m1 X8 u1 e! V6 q* ^
#if 0* g3 B2 O! r. ?, a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 _- Q4 Q: | R& l% [! z7 R7 s. @ if (ret) F/ x# Q* W0 H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# w- h, m! L6 H N( Z; |; s! Z "%d\n", ret);
4 n1 k% |4 g# Y& D+ A7 ?#endif9 q2 y6 n, B3 t$ N' _5 `' c7 n
ret = platform_device_register(&da850_evm_tl_leds_device);
% K- `! m5 y0 ?7 h- ] if (ret)
. S2 l% R* z% b pr_warning("Could not register som GPIO expander LEDS");
7 M' }$ m9 ?; Z, |- ] else. x8 J/ d) J0 T) E4 C1 g
printk(KERN_INFO "LED register sucessful!\n");1 F7 Y4 L* F5 H; Y1 e4 {
% b E( ~# D) y- S
return ret;8 U; I) W6 G! E& k
}; W5 x6 ]- @1 V: l5 r, ^
6 w: R' e3 ^$ S; k, P' j* |1 H" H* l
static void __exit led_platform_exit(void)
, r, `# I% R( {9 r- a3 h{& A4 q, M6 @9 c9 I
platform_device_unregister(&da850_evm_tl_leds_device);
7 ^' z3 i5 }/ c8 \& s# N* M- T/ t- w0 }
printk(KERN_INFO "LED unregister!\n");
+ @6 U) F- y: J" j4 |+ A2 ^9 o}* E4 _' c. U. r7 A5 n6 w
t7 B+ J0 H) a
module_init(led_platform_init);
+ r. T# z4 [8 l2 Y, V' f1 Xmodule_exit(led_platform_exit);
8 d: F9 k6 ]+ I' p0 z, }
! |8 L2 _0 E0 a4 jMODULE_DESCRIPTION("Led platform driver");9 P3 w" A% H0 d: ^2 b% S; _1 F( l
MODULE_AUTHOR("Tronlong");0 R1 J2 r4 w- z/ ~! l, I
MODULE_LICENSE("GPL");
+ ~$ q* H+ r. Y6 |) N- H
* d U# t8 S# o: Y; \ |
|