|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% g) Q0 J" ^( H) J* v+ b7 C F#include <linux/init.h>
* c/ |% f- O0 U, h, L' c5 Y#include <linux/module.h>; M& [ W {& x9 X% n( o7 N
#include <linux/kernel.h>" b. c4 @, C3 r9 P9 }! o' B0 n9 s
#include <linux/types.h>; M# z- E' j* X, I! Y
#include <linux/gpio.h>9 U2 V% o u& X5 E2 x9 }
#include <linux/leds.h>) m/ g: S3 I) N; N
#include <linux/platform_device.h>
$ M, K* ]6 j/ Y+ j4 |5 E( I2 Y( A0 K) I* `+ N* f( H+ g8 t$ \! E1 X
#include <asm/mach-types.h>% u: d8 B9 Z8 X. g
#include <asm/mach/arch.h>
% _1 r7 x3 I0 w2 `* t2 K) s6 C4 e, v#include <mach/da8xx.h>
$ L2 X# K" L2 [4 N9 b# ^" _#include <mach/mux.h>5 F0 O5 y4 W% o2 f7 F+ c
8 Q {+ [5 A6 d4 z) q$ @; @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 ]- L6 E: R/ d z4 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 N, J4 @& q* D$ w" r3 h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 o; p! @+ w+ t7 d& L" e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ Y* F& g( P0 ?8 K: b
6 X5 |! r+ O* [
/* assign the tl som board LED-GPIOs*/
J4 X+ x# @; \' _1 Sstatic const short da850_evm_tl_user_led_pins[] = { G! ~" I( i2 ~
/* These pins are definition at <mach/mux.h> file */7 I8 i4 n8 p" G' e+ h, C6 O3 a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. M6 a7 O% Y1 z u
-1
: }( T+ X) g1 N( B* D1 L! m: L};: {4 H( T/ c/ Z; k6 D
1 G& n9 `+ v3 G/ Y3 n: Astatic struct gpio_led da850_evm_tl_leds[] = {. n% t3 A* b8 @+ Q$ B( O
{8 N+ N8 w$ ?9 Y* ?+ f8 e; [
.active_low = 0,. x! R$ Z6 T0 |8 u6 `6 m
.gpio = DA850_USER_LED0,$ v# P6 \4 ]/ `1 z# S
.name = "user_led0",
/ }# C# S+ A) Y. M .default_trigger = "default-on",
( j7 R" \- d. J+ | },3 d5 L/ a& s- J1 G ?3 [& S
{
# Q. E6 w$ T8 [7 R. k# y2 C .active_low = 0,; z, \8 S$ h l) I7 h" p; e2 F
.gpio = DA850_USER_LED1,6 K6 z: V! I; A( R
.name = "user_led1",
- E: V/ @8 }- K% b. a I .default_trigger = "default-on",1 F1 l$ K7 U$ [& L$ h, j
},4 G& o; S& I* ? X5 l; F
{
$ n" G" E# z/ a) Y .active_low = 0,
. K. ?7 ?. E8 {6 U# c1 I& } .gpio = DA850_USER_LED2,5 H* t) \; A, D4 V# k7 S+ Y
.name = "user_led2",
0 ^0 D# F" a: k% j5 U ~" p .default_trigger = "default-on",' \( \+ ^, N0 ~3 w+ a" d
},6 m& a8 I; I: T) \. E; K! T5 H" m
{
9 A, v2 X# ~5 r .active_low = 0,- X) `, w E9 l! c3 u
.gpio = DA850_USER_LED3,: s8 u8 G' \0 j' P7 @! ^
.name = "user_led3",
% j7 J4 q1 |; ? q1 |; M .default_trigger = "default-on",0 m3 c9 P" t, I0 r
},: q# R' e m* K- q K: _; V
};
% m' E+ I- }: q# x" |+ ]: D! F5 }; Z& b: ?( H% f# v& l5 P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" u# d) u1 k7 H. V6 Q3 z- u% ] .leds = da850_evm_tl_leds,7 Z8 H7 M# Y( J8 `7 r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) o# G. @4 _* z+ v$ m4 {9 p9 l
};8 B! J# M" m$ T9 Q7 [) W
- a2 ?" x* l" P; ystatic void led_dev_release(struct device *dev)9 H$ l+ n0 i1 q8 p
{+ R1 g$ U" t: W8 M* H0 Z6 V
};3 G9 |0 t6 w" o: G+ a1 h) I2 L; J) C
3 b9 H' ~( S6 R' A4 e. z S
static struct platform_device da850_evm_tl_leds_device = {
, i/ Z+ D! M/ U) { .name = "leds-gpio",) x5 q' {& N" N7 [
.id = 1,
* z2 H) J+ j& p- e .dev = {0 X3 j4 ]* S4 x$ @0 q- J
.platform_data = &da850_evm_tl_leds_pdata,
, ~/ N" X! T5 }( g .release = led_dev_release,
$ Y! G3 b+ _: Y, C. w( { }) G6 P! p3 ^2 j7 z6 |2 `
};* X- L) B5 l, P4 s% P+ _
3 ^2 x( v4 e% ?& y. H+ `
static int __init led_platform_init(void)! c- z, b* M! m/ z5 x/ O: ?' p
{
0 b, c4 d6 q8 V$ N* `2 Z" q% D int ret;
- A3 H* k6 L- @+ n* y6 R, i#if 0
9 c2 n9 Z2 c$ u3 W3 m0 J6 R( V* D8 ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( k! m( R5 a9 o0 Q2 T6 `+ A if (ret)- `" ]8 e- `: B5 D# O* s! T5 I& d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 c! ?& ~( N* O. D2 T+ i5 ^ "%d\n", ret);( B$ d& M8 L& `2 O/ s
#endif
/ ]$ T4 |% U- @' u. e ret = platform_device_register(&da850_evm_tl_leds_device);
! b, g* O) ^2 p( Z! S0 I3 b if (ret)
, u6 ?" x; {' B. v r pr_warning("Could not register som GPIO expander LEDS");
& v/ g& ]/ B+ u8 y$ ~6 T# l else) ~: n. d# L* w1 {
printk(KERN_INFO "LED register sucessful!\n");
6 P/ V; n, B. r& {3 C6 s& }- u$ i; L6 }+ q- R0 t3 S# K
return ret;/ L# M3 `! y$ M8 y* g8 D7 `+ G* A4 b
}
* D% u8 C0 r( U/ a9 ~0 j. S
9 s. a! l& r# G4 `static void __exit led_platform_exit(void)
# w# ?: ]# Q$ x{. u h. _, Y3 O7 D* W$ Q# c2 h
platform_device_unregister(&da850_evm_tl_leds_device);
" h2 l% d; t' j, t; k6 j) t% p7 Y
# i- I1 i; p z) x$ O- I) S printk(KERN_INFO "LED unregister!\n");
; q8 i0 p9 r5 k9 T$ x9 K}
4 m/ X; y' A n! B0 ]% @. q" I5 K2 q& I& N
module_init(led_platform_init);
N7 E9 O( {2 U3 Nmodule_exit(led_platform_exit);
" \6 t: ^. v" N6 K K
% n& M+ W9 r* bMODULE_DESCRIPTION("Led platform driver");
1 m8 z! Z# y) q( x& H7 vMODULE_AUTHOR("Tronlong");
; [. ?: z A* NMODULE_LICENSE("GPL");, S% _0 i0 v7 M7 E8 G. |8 l" j9 R4 t# S
2 v* j, X# S y' ]8 w |
|