|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ }! c2 H; Z" g- R" j2 P/ o5 v1 ~
#include <linux/init.h>7 J" ^4 J# |' F0 r# o
#include <linux/module.h>3 q2 i: R/ `- D5 e9 n) t( v
#include <linux/kernel.h>
8 B+ n% s& d5 P' A; P1 \! x#include <linux/types.h>
( j0 o5 M7 n; c# b: ~' L; s#include <linux/gpio.h>" D& h0 f" b$ X; B
#include <linux/leds.h>
; v# W! V7 ]" i' n8 ]#include <linux/platform_device.h>* p, L, V( v+ V: i* k
0 K2 z C" i3 `. `# v" o
#include <asm/mach-types.h>
& ~, S H. T' C) }! M#include <asm/mach/arch.h>
; u2 a# A6 e8 v/ l4 `! H& C#include <mach/da8xx.h>* X& z, f/ n5 d) \# A
#include <mach/mux.h>4 W" f0 i* `# m7 i
4 Z3 x3 [: j( Y- \$ F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 ?# [ ^: G0 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( w; u# x/ l& {9 L' s' W* z |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! q* o# a* E; E) I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) T6 O4 X3 h4 E, h* Z& m8 h
8 j- ^% S( A6 _) X, n$ J. g- N0 L, A
/* assign the tl som board LED-GPIOs*/
6 }2 \; ]% D$ N" s4 Dstatic const short da850_evm_tl_user_led_pins[] = {2 A- B# c0 J0 n7 L* Z; J
/* These pins are definition at <mach/mux.h> file */: R2 Q l: s: N. U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; t& A" N/ [! P" g
-12 S' Y3 } P/ Q- F- w4 |
};
* q! G' U5 k* i2 C& u% N8 `1 A
* P4 I+ _" a6 ^. k" e+ n3 Tstatic struct gpio_led da850_evm_tl_leds[] = {6 N8 Z: C: U) V4 Q4 F' ^2 |% c. m
{
, {" |$ A* L) d( E4 l. H8 [& E .active_low = 0,
" d1 ~2 f8 m* z2 H .gpio = DA850_USER_LED0,
- o2 d, _7 b7 o .name = "user_led0",. h+ g: @$ K2 f
.default_trigger = "default-on",
, O6 Y z% o q },
9 F. J5 W' Z: v/ E, F {
" |1 F: K* g K8 n* {7 P1 d& l4 } .active_low = 0,* N" |, v8 u4 X
.gpio = DA850_USER_LED1,1 S9 O5 v( U! ^0 m- L- n' } L9 c
.name = "user_led1",4 _/ N, q# x: Q" Y; `% Y4 a
.default_trigger = "default-on",3 j" {- l$ m; Q
},
. F6 H6 i8 ?* H- c% G/ V. G# @ {
! S0 o i) U. ]. l6 o! a/ z- { .active_low = 0,# Y6 P3 a$ T' i5 c' ~" k
.gpio = DA850_USER_LED2,7 H% W/ G' x& W) m
.name = "user_led2",9 w( e6 W# Y+ H0 Y
.default_trigger = "default-on",3 n; ? g. K5 C$ J3 n/ R5 c* [
},! z4 c( ?" |$ C" j/ L
{
0 d: } z7 e2 `/ m .active_low = 0,
1 o$ w& [8 r1 C5 v6 m .gpio = DA850_USER_LED3,
8 t. E( | L. x; z0 R .name = "user_led3",
: a- D& b. m v! _0 N# r# z .default_trigger = "default-on",
8 h( e0 S5 F$ A+ t, _8 t },3 N* a! v/ \2 N2 k8 J+ ?9 L7 M3 k+ {
};* d5 q; f9 z/ Z
. ^& {* j; u- W( @1 Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# h: D1 W1 U4 O+ [) Q6 `* I
.leds = da850_evm_tl_leds,4 g' P% o% K8 ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! _' R# s! }+ @};( c( d1 }2 \/ [
* J7 k+ }6 I( H S4 Tstatic void led_dev_release(struct device *dev)$ @8 Y( j- {& [& i `
{# E, c' l& c {' b( O& X
};
9 g: n7 v( b+ V& g6 p8 j. [9 j) [/ p. W5 O8 Z' W; E/ H
static struct platform_device da850_evm_tl_leds_device = {
) h8 a) X, o( n4 p# l" Q .name = "leds-gpio",' c7 ]6 w; S: ?% q# O
.id = 1,7 \7 ^4 r% M7 L2 {' ^9 Z
.dev = {
2 V! Y5 L6 a, B" B# ^ .platform_data = &da850_evm_tl_leds_pdata,
; N$ `' B$ F0 I* H& P) h& j& c5 Q: o .release = led_dev_release,; o& x0 T$ a# R% T) G+ Q. J$ l
}
3 p* l/ I* B5 ~};2 A# X4 x+ Z" ^, g0 T7 ]6 U) D
, G: L. ]; V E0 z
static int __init led_platform_init(void)- f, |& y6 o' z# E+ p# ^1 U4 M
{
$ S5 z9 _2 ~( v0 n2 d; z int ret;
: v+ D6 i& G1 \9 [#if 08 P0 a" p d8 Q* ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
v$ _, q1 R; q4 v/ z. r if (ret)( q1 K4 M: A( m2 J' V- V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 M2 p. q- E/ ^ "%d\n", ret);
; Y% i0 D+ n/ C, z4 v4 m" G6 \# R#endif
* v; @ j- N5 p: z7 p+ B ret = platform_device_register(&da850_evm_tl_leds_device);: u; m. H. j; z/ |
if (ret)
' } t. v$ N) q' b- z; k7 S7 j" l pr_warning("Could not register som GPIO expander LEDS");
+ t; m, p" X& h else& h. y, I2 V. @, o; E/ W
printk(KERN_INFO "LED register sucessful!\n");; _3 U' o: ^! z& V8 m
$ V0 q/ y5 c7 k0 T `& y7 Y
return ret;: S0 f* y& x% l2 p
} u/ M6 Y2 h' `; P
8 ]( J$ ?& ]3 o8 X+ J
static void __exit led_platform_exit(void)
: Q0 n- A1 Q: b- O( g( h# K4 E) z{ ]7 M) [0 ^5 b3 S4 ^7 ^
platform_device_unregister(&da850_evm_tl_leds_device);* l# V( C# R6 @4 q
( {8 H$ g% }0 }7 O. F: \
printk(KERN_INFO "LED unregister!\n");
, Z: [; b# j/ _& Q}/ D5 O ] C1 ]% m% h
2 H' v; N+ e* A7 h6 y6 S% p! g
module_init(led_platform_init);
2 Y% ]& q; C& h( G0 r+ n( Xmodule_exit(led_platform_exit);6 ?4 t+ f; E+ ?1 V! {9 P; U' W
5 v9 M! Z* o& l9 o
MODULE_DESCRIPTION("Led platform driver");) ^0 p W$ ^. V- _- ?& Z
MODULE_AUTHOR("Tronlong");
: A+ Q, `/ _0 S8 e$ d4 {MODULE_LICENSE("GPL");8 ^! G8 I: [% }& Z3 P
. a) z% Q% C% Z: v7 u" l |
|