|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- f- z$ H: i2 F# q3 Y4 l9 W" q
#include <linux/init.h>
8 B* Q+ _/ H8 _0 K#include <linux/module.h>
" Q6 E& i2 h3 p8 p; N#include <linux/kernel.h>
& n5 M$ ? H7 I# s0 V. F) s#include <linux/types.h>, m2 r, S, p' Y! \; n7 X
#include <linux/gpio.h>/ j* @" ]1 M. d* v" F. X U% z3 u
#include <linux/leds.h>
0 g' k5 N0 h- l+ k0 a& p' o#include <linux/platform_device.h>( _( t! Z8 h9 b! o8 U& W: f' A
- X6 _7 y2 q+ C$ u2 {% `4 z#include <asm/mach-types.h>0 H+ i& }+ u8 d; L
#include <asm/mach/arch.h>
+ [+ B0 {! g8 e* v7 P9 ~1 i- d#include <mach/da8xx.h>
! s% \( I) ]6 T5 M( u#include <mach/mux.h>
& I. J0 }2 ~* U/ `
3 Y$ ]$ C* n8 A# G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 O) {( z( C% y8 }5 e" H z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ f( Z, |, D/ Z$ l! O0 _; z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 ~7 G0 v2 [: V! V, `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& Z/ i8 k% M+ h
$ P' G. T/ q, ~3 H& x5 Z6 |
/* assign the tl som board LED-GPIOs*// f6 ]7 j8 A/ p3 F
static const short da850_evm_tl_user_led_pins[] = {
! y6 V2 I6 ^$ ~9 B5 \3 M /* These pins are definition at <mach/mux.h> file */0 l. \/ ]! D, f' V% ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 }8 e' L* r3 a
-1
# D& a1 L1 l z" f! _1 J};7 U8 Y2 o, u* E6 Z- D! D, b
# Z% `2 @" _ ~
static struct gpio_led da850_evm_tl_leds[] = {, t" X) Z: ~5 g; B0 K: j: C
{
% D9 } t- k% k' j .active_low = 0,9 \" o, @- X6 W$ `
.gpio = DA850_USER_LED0,/ S% c, X% b# c' d/ D
.name = "user_led0",
, m! v. g( k, t, e' {& v, P .default_trigger = "default-on",) ?# a. d% A. _; y7 Z
},
8 K* B+ [! N% g' u: Y {0 |6 d& I3 F- V: ]9 T, T W6 H( K
.active_low = 0,
( c, S( l* E6 x+ N9 Z6 B+ `9 f .gpio = DA850_USER_LED1,
* `2 n }; l+ `& b) v% m2 { .name = "user_led1",3 ]8 ~9 K2 N' R
.default_trigger = "default-on",2 ?, M- k1 C6 S0 A
},
! w2 t$ a' S9 p0 `( u! ~ {
3 F3 m9 e4 L, f9 a9 l4 [ .active_low = 0,
, _* K6 y7 f& X2 v( q! }( ?% c .gpio = DA850_USER_LED2,8 o+ F) d: g6 F# A
.name = "user_led2",! [7 {+ Y9 t4 V& N0 @+ z( b( k
.default_trigger = "default-on",2 U6 M$ @3 ]) b9 Z
},
1 B/ h8 A: E" b- L; {( n {
# f! z! Z; c$ L( Z' \ T- \/ W: Y .active_low = 0,: f" C- a' p( D( Z9 L2 {
.gpio = DA850_USER_LED3,: x) _' c! E- e; H i
.name = "user_led3",
* f/ n/ }. A" {6 m, w .default_trigger = "default-on",/ Z# y1 ^2 X& z2 A3 K5 a
},
% K6 r1 d; m9 e5 D; W* I}; }! t; J. l, s2 G
! D: B: i1 L0 j6 R4 |6 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 U' H( g# N) ]% H9 P0 Q+ u- }0 r
.leds = da850_evm_tl_leds,
$ {& U' w' i( E. F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% u- k4 @2 F2 h9 K& a
};
/ N- B6 b @/ y9 o6 P4 c6 D4 C( N0 ^( e. O# b
static void led_dev_release(struct device *dev)3 v, @% j6 V! j* `# k8 `
{
. Q6 x! B7 k4 q};, _; u3 a- B; V$ E( s* z
0 v6 q7 A) V1 H7 A* wstatic struct platform_device da850_evm_tl_leds_device = {
% u0 [# n3 B( ]/ o- q .name = "leds-gpio",* ], l i! |5 d# H* C: V" W8 B5 O. I
.id = 1,) V# I8 V' C* v6 e1 `7 P. ]9 E
.dev = {
, i+ Z/ }: o S5 I0 A# p. i+ s .platform_data = &da850_evm_tl_leds_pdata,
6 x1 r4 I+ b) B# H5 m& k6 g9 { .release = led_dev_release,
8 x8 L; X5 [9 T# |9 I$ J }
1 B8 ^( v$ r3 Y6 x) [};" e- @$ P5 p6 K) V4 h4 V" }8 ^
1 n: ^% {% {3 P/ Y' O& Y2 o3 `static int __init led_platform_init(void): ~7 g) ?2 f9 E2 Q; i
{* ^- y( G4 u7 x8 i; y! {
int ret;
9 R4 x, @% F( f; f9 Q z#if 0
1 `( }7 v9 T0 R. | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% p! l, e. k2 q+ x3 X) w if (ret)
t% L( E# V' e/ F7 H3 Y5 \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :". O1 @/ H% Y3 M3 s# u) E2 Q& F
"%d\n", ret);
9 }9 W" a/ J8 Y* }9 N5 l#endif
2 I4 E- {2 [( ^% r' K ret = platform_device_register(&da850_evm_tl_leds_device);8 {+ O7 E+ u \7 ]" \5 N( d
if (ret)( T& a/ W1 I6 N9 Q
pr_warning("Could not register som GPIO expander LEDS");( x% v9 P. m0 i
else% Y1 o* e, B8 A' V, K
printk(KERN_INFO "LED register sucessful!\n");* z$ Q- n' T0 w
9 \. G+ i5 @! Y6 a0 s+ k- k
return ret;
$ p( j+ r. }: S& {}% |7 C, K, B* P! w* L
5 p) w! Y' B3 E7 l
static void __exit led_platform_exit(void)
/ J$ X6 s& `9 S* X6 z{
* D5 I: Y8 a( \7 |' b platform_device_unregister(&da850_evm_tl_leds_device);
" \0 ]9 t/ V2 }' H5 t7 N+ A( H( N& c9 O' p* k- g
printk(KERN_INFO "LED unregister!\n");
* y( O) W! _, V% v}5 k L% C6 o5 g3 c
6 o7 T2 t# p6 k8 Z1 nmodule_init(led_platform_init);
% g1 p/ g+ O, @+ Z3 r6 Mmodule_exit(led_platform_exit);6 U$ H5 ~9 t7 p: V7 Z! K- k
2 `8 a0 g3 r( W+ p, C
MODULE_DESCRIPTION("Led platform driver");
# G+ A; \% H* H- r8 }MODULE_AUTHOR("Tronlong");
4 }. J! [. o# f9 M" o# gMODULE_LICENSE("GPL");& p. \ K; s2 m( ~
$ h9 i* M" c* V3 ]- [2 b
|
|