|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" w0 M: I s% u% J1 n#include <linux/init.h>
1 \/ c3 A' _$ n2 R7 ~#include <linux/module.h>
) U" Q+ Y6 ?( }#include <linux/kernel.h>+ J X% p" ~3 j1 h" ?
#include <linux/types.h>) }4 ^: b6 g9 t N) j
#include <linux/gpio.h>
. m8 Y0 i1 S7 C% Y, A( w; d#include <linux/leds.h>4 ?9 K; Y7 `. ~ F9 [% {
#include <linux/platform_device.h>
; e, r/ N9 ]# p, _: S Y3 W5 a+ d4 _8 G& H5 Q$ c
#include <asm/mach-types.h>4 p' d4 l; }+ v+ z6 \$ a9 @
#include <asm/mach/arch.h>
( X$ G7 B1 o5 l#include <mach/da8xx.h>
1 r: I+ V$ m0 P3 h/ p#include <mach/mux.h>
6 a1 P: _8 l* }5 R0 j/ M2 I' V" T+ N/ n- m% t* W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) H& w, ^' k {& \# H8 M' p8 u8 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 F+ F# E2 E0 ~: C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ z/ X' P4 l$ o$ K! X* i3 ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" i/ {- D, t: G4 c! a7 N
/ ^& w5 K' Z6 t
/* assign the tl som board LED-GPIOs*/
, F" i1 b2 O: V$ f7 }) vstatic const short da850_evm_tl_user_led_pins[] = {5 X# {+ n U% F! u
/* These pins are definition at <mach/mux.h> file */
& h4 X. E- [& S; I0 Z+ ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) b, K5 Q& d; b S% W -1
7 W3 M/ ]/ k, Y5 ]6 j0 O};
8 ^' y6 T v R; n4 `: ^& T. C) G5 i2 x) @+ d
static struct gpio_led da850_evm_tl_leds[] = {6 v0 O5 z7 Q% j( B0 t8 w0 j
{
+ u5 ^. P/ J& X: ^9 K) i& n .active_low = 0,
* {( x# p- C; S! P5 Y .gpio = DA850_USER_LED0,
* M1 g' A2 [ }- p% r7 z$ V .name = "user_led0",# ~, `/ ^ h: V% v! |9 z5 J
.default_trigger = "default-on",1 g5 L. C. n& ^ o0 t
},/ u8 n( `) l( J& D9 k
{2 m* G3 _* x, e1 e+ d t* j; E; b
.active_low = 0,# j2 v1 u/ x" z9 Y) r1 H
.gpio = DA850_USER_LED1,
1 _8 k6 G3 C" _* D .name = "user_led1",
: V7 q5 |% q+ H$ f& ^' i9 D .default_trigger = "default-on",0 Z+ R1 R% T( x
},+ J* R* M6 @. b' t% Y2 m
{8 A$ v% P2 B: T6 ]7 _7 p6 {7 a
.active_low = 0,
2 {" d7 s) X0 V! s1 B .gpio = DA850_USER_LED2,
6 D4 f1 v8 A* X7 L1 q .name = "user_led2",& e. S8 w f' J
.default_trigger = "default-on",9 Z* z7 k; t0 e& Q3 r
},
; f: z, P% n$ y$ Y2 T: g$ v1 n- z {
$ q9 n, d0 u( B; G! K$ @6 V$ y .active_low = 0,
- T9 v$ Z/ P0 p9 Y# f0 `* m .gpio = DA850_USER_LED3,5 E5 u$ \/ T7 k6 ?
.name = "user_led3",
/ R6 [! W. l- t' \4 R0 b* v .default_trigger = "default-on",
3 r* U- i/ ]! a },( d0 E# i+ C" ~# \5 V
};! |8 l8 |2 s) p# F, b$ q
* T) [ V- }' } n: q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* @# p) @/ F. q, e1 h
.leds = da850_evm_tl_leds,% Y+ \2 t ]* v( o! L: w3 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& c9 o2 N' m$ O: A( x ~ n};
- r& K. t. G$ W% _) S7 t* _3 J9 E ^$ ~9 i7 ?# f
static void led_dev_release(struct device *dev)
- R4 ?) w. p$ u1 z5 M* D{0 A9 n* A- N( S1 `; q* e$ _% k9 G
};
/ p5 z0 V4 M8 N" `
& z: h D3 X' sstatic struct platform_device da850_evm_tl_leds_device = {
+ m- r" f* B! \ .name = "leds-gpio",$ f" p. X. P& c# M
.id = 1,
5 ?" j8 v7 X w, N: | .dev = {, u8 H6 ?# s' I5 x4 }
.platform_data = &da850_evm_tl_leds_pdata,
$ B) ~. y3 {: {: v: ] .release = led_dev_release,
% p9 B6 h3 A1 Q4 k) C6 t- w% N }& S/ A/ Q- E( G
};
. L- e2 a M/ E" o. X, ~7 d3 X0 l' B1 l# H
static int __init led_platform_init(void)
# }: P5 H, r$ L( O" Y3 U2 `" U{: i" b2 h$ [& y. v$ L8 J
int ret;2 F) B4 ]/ t! a; f( U- w" @
#if 01 W5 \: m6 \3 J) u. K$ c) ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ _" q/ G" V& x! a! [ if (ret)
6 D; l, G) a1 ^$ p5 M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% r' b1 J: ^+ j, I% e "%d\n", ret);0 l+ p3 a. g1 T7 J* b) t) e& y
#endif2 f$ k& D$ s: |" h
ret = platform_device_register(&da850_evm_tl_leds_device);2 |, x5 l; E' O0 ?# x2 F1 f3 ~
if (ret)
6 d5 a) g l+ ]% B$ L* n) I5 F pr_warning("Could not register som GPIO expander LEDS");4 Z& I3 b2 Q' n8 f/ F1 `
else
/ z5 o! V% K# P& e: Y ^& V printk(KERN_INFO "LED register sucessful!\n");
/ c! n/ b) v. ?; _( i+ ~/ l! y, U9 D _. F0 O9 M: o/ Q8 W* n
return ret;
% \ I( O u9 o}
8 r" R) \" O! L" h2 w4 t2 x3 [
9 R' L7 U, z) g) S. Q. qstatic void __exit led_platform_exit(void)
5 ^2 b8 z+ `# x* U( B) b{# E2 n. Q/ ]" M$ a N {0 G% C* N+ X
platform_device_unregister(&da850_evm_tl_leds_device);
, n8 G( [. _8 `! o" y2 u0 f5 o# {% R) l
printk(KERN_INFO "LED unregister!\n");
) v8 ^' ?1 @, S; G7 l}9 N3 k* J- a" v% C
7 o# U; F1 j' Z# ~7 U# @( p
module_init(led_platform_init);
5 Q2 ^0 s) L; U4 Pmodule_exit(led_platform_exit);2 {. A7 n0 q9 @, m' S
* |3 m$ A; l8 c$ z$ KMODULE_DESCRIPTION("Led platform driver");
% C; J% V9 c$ r- I4 FMODULE_AUTHOR("Tronlong");
3 B3 j# E, Y1 DMODULE_LICENSE("GPL");
, q& V0 E! V8 A3 H9 _, j; B, G, S/ p+ q8 s5 m3 U
|
|