|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" P+ f. q6 l9 ^. d
#include <linux/init.h>
T a5 O: `% y1 l8 E( J#include <linux/module.h>
4 N0 ^8 O' J. T8 C8 J) n#include <linux/kernel.h>9 z4 ?+ g2 C* T: [
#include <linux/types.h>
8 Q7 H0 x1 O* l, w! {, {; @9 w, I#include <linux/gpio.h>
# f# f- H0 n+ |8 w- |6 g9 m0 @* t9 E4 y#include <linux/leds.h>
! ^ ~5 d6 e/ a/ o#include <linux/platform_device.h>
- I! Q- }+ A0 E: a( T. W( \1 W8 e$ [
#include <asm/mach-types.h>3 F8 b: O! r+ r
#include <asm/mach/arch.h>
$ `4 A5 O8 M. K, k6 T' u5 h#include <mach/da8xx.h>- L! x% @7 x, S
#include <mach/mux.h>
4 f& G& }$ I t, N! \8 C# V0 }! Q2 ?# E' n5 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' s# B* b3 t" q' J# H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): P4 n0 Q- M% M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! t. W' t8 |: I8 I- ^$ S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( c& t# V/ c9 Q) S+ A2 M
3 B1 B4 I1 O: d( T6 V$ I: K/* assign the tl som board LED-GPIOs*// G! }; Z8 d" b8 E
static const short da850_evm_tl_user_led_pins[] = {
- i/ l! [. V& I( D /* These pins are definition at <mach/mux.h> file */
4 _6 b! G9 u+ Y/ q1 E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 j0 U% E; t( F% W5 L: B
-1
8 x) d! O+ k0 ^/ U};
& n6 k/ _# E! }" C- t% J) q2 r. [5 F8 _, \, L* {: O
static struct gpio_led da850_evm_tl_leds[] = {
# `; u/ r" t2 v; Z! ?- v5 t {* |$ u! J2 G* b- C$ h6 _" @0 d
.active_low = 0,
' Q" N! h" B% H: U .gpio = DA850_USER_LED0,
5 i6 f) [. W7 v; T+ d7 e .name = "user_led0"," R0 q9 \. J: {/ Z+ c& M3 L9 T: I
.default_trigger = "default-on",- a) f9 q1 K0 V
},+ M: k2 T# `! V8 b2 O8 U2 I
{$ |7 ]# x: z% q6 x1 D
.active_low = 0,
* r; w$ I, V4 D: I .gpio = DA850_USER_LED1,5 b: z/ H1 Q# Z+ F! O- B
.name = "user_led1",2 N @, j u0 D+ _/ i. z) z
.default_trigger = "default-on",1 L& v% ~9 q: R5 o7 {" p
},2 w Y j% H# i0 f0 a# M
{0 Q' {% s/ S# K: \6 L6 J
.active_low = 0,4 ~2 ~, `- P4 o2 _/ N5 w- H
.gpio = DA850_USER_LED2,$ \! Y3 a- {4 \) y
.name = "user_led2"," u* [4 U5 h* j3 X% z$ b9 h5 V
.default_trigger = "default-on",
/ [$ r; ^8 q* ]* v },
6 c9 [5 ~) R! p) k! s2 O' ? {* C$ X( n: e }. Y9 v+ Z' n2 \
.active_low = 0,% D0 U0 S+ n$ L
.gpio = DA850_USER_LED3,
$ b t' r# X+ p- Y .name = "user_led3",
' J* \0 s, k9 d% B% o1 o# V. a .default_trigger = "default-on",
4 c! _" R/ x5 [5 r* [ },
9 X7 C1 b* I# r0 D" T};: v m$ \1 w* B+ l$ ~
6 g6 a: T) V2 J6 ?! T- d; R' }/ }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 x8 E2 J, B/ ]3 i: ~1 C
.leds = da850_evm_tl_leds," `, v+ X+ ~5 ` F6 y# G0 g8 v% r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; R+ Z9 X) d4 A0 k
};
0 A$ K' d- X+ c1 N; `5 q
4 Z+ q8 U6 C" q+ B$ sstatic void led_dev_release(struct device *dev)! s2 z5 C1 K1 X
{2 a& A8 a6 |! `' n2 J5 M1 S" F: R
};
/ X+ g* I" W! V5 n* U8 z1 u% a% V9 f& @, w
static struct platform_device da850_evm_tl_leds_device = {
4 g) ~: l* {% |0 _% k) E .name = "leds-gpio",& x2 N) g9 {" @) E; ~- T! L# M
.id = 1,
3 O( U. [6 J7 e .dev = {
) N$ H( c5 h9 l* M1 E9 y5 S& u* u# k .platform_data = &da850_evm_tl_leds_pdata,3 o8 S: }+ M- T7 l
.release = led_dev_release,
8 o+ z# j' T- D5 e, J }
7 a: B: X$ z- x8 v};2 M; P& q" h$ j( Y
) C! M" n7 b, P. o" r. z0 A
static int __init led_platform_init(void)
; Q1 f% U* u, c; L{
' G' X0 Y ^1 Q9 B1 a& j int ret;( W* U& {3 |5 J2 |7 B
#if 0
& f; C9 z/ D/ [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ R6 Q& o+ Q0 X# R6 J9 X9 l6 p
if (ret); m4 Y7 I# b4 l& Q) G7 h A- s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& p m, p1 W. y' P n: o6 A
"%d\n", ret);
" R/ {! S3 i+ S# F( G) d! \#endif* L! J' x4 ] {! e
ret = platform_device_register(&da850_evm_tl_leds_device);
L; Y# i$ q' `+ k if (ret)5 \) N( b7 H* A; |4 {) I. ]
pr_warning("Could not register som GPIO expander LEDS");
( T9 O8 f9 g8 [+ `$ _ else
: N5 u" v: {- f printk(KERN_INFO "LED register sucessful!\n");
$ f6 E8 n" B( i/ g$ } q) S" v: z2 ^( K: T
return ret;# ]" `- _- M; ]6 s; m, y5 J
}
5 P0 m. T' m1 ?8 @) ?
# m- |# |* T0 h. e+ Lstatic void __exit led_platform_exit(void)
: z0 h8 N: ]9 i! _7 s8 { Y' X" S{6 `1 `# |$ E" u# X7 }2 Z. g
platform_device_unregister(&da850_evm_tl_leds_device);
7 T% Y+ }+ c6 j% |, _3 q& l- p( D
T9 k e# z7 I! P0 y3 g% O printk(KERN_INFO "LED unregister!\n");
; q( i6 `, S* p& x}3 ^) q6 E4 ?0 c! n3 A
5 X1 P9 d: L8 H- Z
module_init(led_platform_init);
( f. B) X0 B! D' ymodule_exit(led_platform_exit);! v7 t+ Y2 g0 L2 \
# p; ?, [" i" R# C
MODULE_DESCRIPTION("Led platform driver");8 L" R0 x3 s7 H( u5 A- ]9 y5 l/ |
MODULE_AUTHOR("Tronlong");
5 T4 E2 X5 ~& a& OMODULE_LICENSE("GPL");4 t* T# e' z6 C' m' F8 |
4 X& n4 ]$ N K) n! a; J
|
|