|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- G% b# Q z6 O, y+ g. P#include <linux/init.h>) j, o! b3 T/ F8 H
#include <linux/module.h>
2 M0 ^- G1 G$ N* J8 V2 r0 K- v#include <linux/kernel.h>
5 u' d: r6 V; q; S" ~* d#include <linux/types.h>
" ^) a/ h& w4 c#include <linux/gpio.h>' K& ^# \# Q. t
#include <linux/leds.h>
# Z- _3 h1 e. @$ n- L#include <linux/platform_device.h>8 b) w* H, z* ] d J
- [% R5 |2 s& E9 S1 [6 H1 o#include <asm/mach-types.h>
|; o' D# w* \3 x. u#include <asm/mach/arch.h> {; ^; Y" }. k
#include <mach/da8xx.h>
0 W2 W0 _0 h) R* A2 F. x1 r#include <mach/mux.h>
; f# Z2 T4 t3 H+ S+ }) t0 M& P7 z W1 x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" [3 p2 n2 o; w3 j, F# E `& m( k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! r& s0 q% Y& o) j: K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: K# c3 |4 Q& {5 i9 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 E0 i$ W% ~5 ~3 L p( u/ w
, x) g+ T& B$ P: l+ @/* assign the tl som board LED-GPIOs*/5 z. U7 v, u) k7 g1 v
static const short da850_evm_tl_user_led_pins[] = {
, G$ k) S8 C+ @5 F F /* These pins are definition at <mach/mux.h> file */
0 U5 R- I7 S6 q. P$ L, m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 P+ q0 o* Q/ ` -1
9 {/ O7 h. s2 K( d, ^5 G& g/ e7 P+ R};* h" B9 @* F. M1 u
$ t- S1 P+ ? ?3 f8 fstatic struct gpio_led da850_evm_tl_leds[] = {' Q* z+ o! G+ l" n& z
{" ^3 T4 B$ ~& i$ u
.active_low = 0,
; d. F0 a- N1 x1 {, Y- E/ }4 r .gpio = DA850_USER_LED0,
- X9 _: G) D6 }9 n" r" _ .name = "user_led0",
' y- _" e% g4 ~+ { .default_trigger = "default-on",% n/ i4 S: [' C/ |- a1 d
},: n0 l+ t' Z1 {8 i* d4 }/ H/ B
{
' b- r, x7 v/ H; R .active_low = 0,
" _: y/ g0 Z4 y* r+ N: X3 k .gpio = DA850_USER_LED1,
8 |( O; ?" K% C3 y .name = "user_led1",3 |* r* P) f! W1 L; h: v
.default_trigger = "default-on",
/ V" y1 u5 \$ C% M8 l X1 N, R4 t },
! K' y; _/ S8 [* q$ k& g& D {
2 O. Y& B; F& ?, j0 l5 p( X .active_low = 0,
- d% y4 B: Y" H! @; j$ f, m8 T .gpio = DA850_USER_LED2,. ?! l( E2 z- j& v3 D% H3 y5 j
.name = "user_led2",
5 }) @5 O$ s$ M2 R! J .default_trigger = "default-on",, T1 {/ v6 f6 @1 I( P5 Q
},7 x% B, z- L- r* p+ m1 e ^2 R4 Z
{
4 D) o+ b u+ a .active_low = 0,5 C1 s n' V$ z& k2 I
.gpio = DA850_USER_LED3,' V# F( a- O6 C7 T& y8 B
.name = "user_led3",
$ k7 f D& l' h8 B( o* L. g .default_trigger = "default-on",3 w3 `# {6 } [ E/ \
},4 L4 [; W# z: q2 i1 n, \1 W
};
- Q' s8 W+ ]" n- I
; n6 f' _8 Z; I! s) p% {# Q# W' Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: [$ {6 B6 _' e7 K# m8 D
.leds = da850_evm_tl_leds,- a0 R: F! E5 Z% Z8 ~+ }( ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 T- x' m4 S1 g) c( g/ {};9 N9 w r- F5 g( {
4 ^9 ]" U$ q! c- P+ ]static void led_dev_release(struct device *dev)6 z$ A) c' e* M/ M) {8 M! ~1 s
{
, x! Y# [$ U9 E. p: y5 q- E/ k};5 R- }5 Z: Y6 r6 r. T
9 ?7 G2 r! j2 [, Q9 Q- Gstatic struct platform_device da850_evm_tl_leds_device = {2 ?; S% l4 {, i* {
.name = "leds-gpio",; U- V% ?/ q/ A. C
.id = 1,
1 F/ f" ]* [# I. B .dev = {
% X* L* Z4 a, S .platform_data = &da850_evm_tl_leds_pdata,
; X6 A* t3 o% G6 U* q; } .release = led_dev_release,( o/ p- A( r# j- k- p4 t
}
; h' y- o) Q6 P9 n};9 u1 l, i3 S* Z l" g! c3 P
; O2 _) ]6 K% ~3 S+ k. R
static int __init led_platform_init(void)+ ^* L* F, u) Q9 A3 C
{; W2 x3 L9 ]! L/ D
int ret;
: X; |- ?5 T5 D& |' a#if 0
+ U5 A; F! a0 F& t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! t- L$ s# v& c3 o; J: Q* f5 q! t
if (ret)
+ _' \5 z3 Z' h' L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 p9 N" f& B1 O+ }- _ \9 V4 T/ W
"%d\n", ret);
* F0 d) B( j; l2 i: R# h5 `7 M* ^$ ]! C#endif- l4 h/ v! P* K7 n5 U0 a3 r
ret = platform_device_register(&da850_evm_tl_leds_device);2 A( t, ]+ a( _( c
if (ret)/ @* x: {8 w* g' e# c l. b7 Y; h
pr_warning("Could not register som GPIO expander LEDS");9 L. e7 u' V) j; l& f4 O% W
else& E2 V* s7 d0 P# P6 ~5 `
printk(KERN_INFO "LED register sucessful!\n");' e$ R+ [& b. |) j+ A
/ H( c2 R: n/ K. v4 e& r, ` return ret;
! B( x8 T- c B3 K2 T}# P% Z, N5 |' G. C1 N; I! l. J
) G, k" z8 I" O5 Q8 {
static void __exit led_platform_exit(void)
O& `5 ^5 Z: \ s' ^{; f/ a( c& K) f& c' I
platform_device_unregister(&da850_evm_tl_leds_device);, y8 u$ q# }7 p' G0 R- O( q7 e
5 V5 z4 y% _! P, F% w
printk(KERN_INFO "LED unregister!\n");0 n4 b K( k% M+ m4 t8 ~
}# k& w0 _/ d1 G( ?% B
* T1 q) Z) d( ]! ~) v! Y# w/ Imodule_init(led_platform_init);$ P3 A# i" W, o; x* g
module_exit(led_platform_exit);) w! d) q4 Y' o& _
' M6 z9 X! X/ L( [1 E
MODULE_DESCRIPTION("Led platform driver");
+ P" V- `- n5 y. nMODULE_AUTHOR("Tronlong");
3 a6 p" t1 A7 H0 e* FMODULE_LICENSE("GPL");
- p0 y4 ]; w9 P) Y! U9 M* @* c% p* |8 l* m- l5 v C- j" V
|
|