|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! T T: @! j8 S, {
#include <linux/init.h>
6 G, z5 Y" e9 y' @8 ~: W8 J# _#include <linux/module.h>
" G# l V- s: }7 `#include <linux/kernel.h>+ e. \/ M+ u/ r5 j5 H
#include <linux/types.h>1 h: g3 l9 j& ]$ N2 j
#include <linux/gpio.h>
: |) K; }4 m' T# j. q ^0 T#include <linux/leds.h>/ O7 |% p% f n$ b
#include <linux/platform_device.h>
6 a2 P. L6 m% Z' L: R0 O K4 z$ R' e2 p4 H
#include <asm/mach-types.h>
0 T5 Y: \& r' V+ F. N& {#include <asm/mach/arch.h>9 J/ [4 a4 j$ O8 |7 }1 J6 y
#include <mach/da8xx.h>/ J; i) y+ F% E3 I y
#include <mach/mux.h>$ o/ i9 I {' [9 K* C5 t4 K
) A; C% u! z! I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 m$ C) q' F8 \& m" Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' W) \( W4 |! t0 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ E: K- k8 b9 {. d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) _1 m7 ]! h4 P5 D1 h
' s1 I Y. g8 C% k0 h" v3 i5 Q& `) ~
/* assign the tl som board LED-GPIOs*/
5 M) R: `( v& M8 i/ ~, istatic const short da850_evm_tl_user_led_pins[] = {3 i! U C0 i2 Q. F
/* These pins are definition at <mach/mux.h> file */8 q, L( K/ P* T5 X, r5 O& @. P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ [ N; L9 G: Z% a -1 |8 o" r5 ^9 x+ Z p
};& G6 q+ n" `; s
5 R; G3 Q) Z$ `
static struct gpio_led da850_evm_tl_leds[] = {- v2 o0 I( b2 L+ C/ u
{
5 q5 J& a) c3 \! ? .active_low = 0,' e0 A2 `# X+ N- ]
.gpio = DA850_USER_LED0,! P8 M" _2 z: o8 A3 l
.name = "user_led0",
) v- H" r- c) n& C1 E5 W2 E% G+ M .default_trigger = "default-on", k: D" s+ t: t# y
},# ]; X. G8 _% D P/ J
{
( }* {. i( U8 M5 z3 j4 r& @ .active_low = 0,
3 _6 E, X# B7 h. m& v- k .gpio = DA850_USER_LED1,- g1 M: Y! ~' Z
.name = "user_led1",
- l0 N+ |1 m/ ~% X: z9 s .default_trigger = "default-on",
1 }* Y# `. U( R# h8 C/ X s },
T L z3 h) D3 Q6 V* @4 H" g {
8 p: `, N# x/ { .active_low = 0,! P' Z9 J3 Z ~$ U9 y7 j
.gpio = DA850_USER_LED2,: ], j# g* r K% |4 _7 H2 i
.name = "user_led2",, |2 n. P9 x T( q l* g0 a, G$ y
.default_trigger = "default-on",' ^: Q* S" G/ v+ T2 ]
},8 C# f! X$ h4 J$ z7 ?) `
{& @2 r9 j; `6 C. W
.active_low = 0,
; ]& j1 `5 _8 E; O5 W .gpio = DA850_USER_LED3,% |2 R% F' j8 c& x7 X. r/ D
.name = "user_led3", q% I; O2 V5 b) F7 p7 j
.default_trigger = "default-on",/ S* r+ [/ [4 A6 F. ^ D( B8 Z
},
5 f) W( B$ w5 Y0 L# p" m};% N7 O0 l( M' q. ^0 s; d$ a2 P/ u
7 T9 r1 l$ A5 C" ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, a( N& {( z0 X5 B .leds = da850_evm_tl_leds,
( D. y6 P" F% @4 }: T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( M, |* I3 z, u) D; m
};3 R$ e0 z) ^. I' E5 w4 p
3 B! W: j* O; [1 {- u; I2 ustatic void led_dev_release(struct device *dev)% B8 q! Y# Z9 o0 |2 a0 _& b1 _ P
{
$ y" c; U3 A) x};3 i9 N/ Q6 X! @, a
( _$ o0 y: L$ Y1 {9 ]static struct platform_device da850_evm_tl_leds_device = {
( P% u% T. \& L m, ^( B: I .name = "leds-gpio",
" [7 F2 ~" g( b5 P .id = 1,, @7 l& K' X3 [' H. {7 h( z
.dev = {3 ~% Q: S% |/ A) u6 t
.platform_data = &da850_evm_tl_leds_pdata,
9 Q7 v3 n/ K6 ] .release = led_dev_release,9 ~7 Q$ L8 @; Y, l# ^! Y
}' i e9 a) i2 d+ E7 R- z8 p% r
};2 e% _) \4 N O, t- W. }
# t1 u \3 E, r5 w% {
static int __init led_platform_init(void)
A0 l3 A {6 }8 }{, j( G& f1 v: o2 W. ]# Y6 A: |
int ret;6 O- T( z( L5 n6 |/ z9 f
#if 0
4 Q7 D, G0 o5 U: C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 w9 r$ E* ^9 C4 V. b/ B if (ret)* z# R# q3 X+ i: s6 C. ]8 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ n% g: K7 J) q0 O& R* O. P# j
"%d\n", ret);
+ }' f5 b9 e7 v9 \1 R( x5 A/ b/ D#endif0 m, A' ]6 x$ w5 b* ]
ret = platform_device_register(&da850_evm_tl_leds_device);
1 ]# h6 q8 s7 k8 R. d if (ret)
: V' ^) o2 ?9 R0 f pr_warning("Could not register som GPIO expander LEDS");* u& W* k* c# A
else
8 I0 _; W2 M- G7 g( D; t printk(KERN_INFO "LED register sucessful!\n");
2 h. y+ k5 A3 f4 e- ?" V
( F6 z! _/ K; J$ \5 Z" P return ret;' q6 l! P; ]/ Q1 `# r
}
$ p k, V4 p( h) i c* R1 |8 P6 I: l( v
static void __exit led_platform_exit(void)+ X1 E5 |: |9 M% \
{% ?" A; v3 E( X* v: C7 g X$ n
platform_device_unregister(&da850_evm_tl_leds_device);
; O3 ]$ k( r g* J, h& p W8 o8 A; K$ q' i
printk(KERN_INFO "LED unregister!\n");+ |$ h7 A: o' C; S7 \' N/ B
}
8 N0 f( w9 w5 ^9 g! r7 n {. i. A% n& T; u& k. |
module_init(led_platform_init);6 n+ B, |3 U6 u- r0 w. E9 X
module_exit(led_platform_exit);
" \* Q7 R9 }. `- ~3 C5 a; Z- w
1 J( x8 P+ L7 J$ e% dMODULE_DESCRIPTION("Led platform driver");3 Z+ [! q, y9 B3 {4 j" @
MODULE_AUTHOR("Tronlong");
6 t6 w, c! l! R3 u3 x2 wMODULE_LICENSE("GPL");
9 f+ G& [/ J0 ?# E; |8 G5 P7 l4 w9 m9 W
|
|