|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; G' {& G) ]6 c
#include <linux/init.h>- }, z1 s$ K+ D( a8 m
#include <linux/module.h>
9 {0 R( e6 Z! O" E2 q1 a#include <linux/kernel.h>% @5 ]6 y" z o6 X3 w
#include <linux/types.h>
5 Y; W' y4 r s6 H+ r* g#include <linux/gpio.h>1 D% i2 a7 p. l. S4 b) f1 U3 S0 L
#include <linux/leds.h>* m' Y: v" x4 X) G! F
#include <linux/platform_device.h>
2 v; b+ `5 a1 X* Q/ t/ A# I; J( n& ?) z E o9 s+ n' {
#include <asm/mach-types.h>
e8 W% K3 X8 |- A8 F#include <asm/mach/arch.h>9 C4 A* `5 F; d6 E4 u) i2 f7 N' U
#include <mach/da8xx.h>( B, `# [1 E$ B, X/ Z
#include <mach/mux.h>
+ ~6 ]* ^- S& s' A! T+ u7 ~5 m: w1 e2 z, C% s# ?% k/ r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ ?. P1 M; F9 F$ n1 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). j9 v# B3 i4 D8 V7 X9 a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# d* E+ N5 N! m1 p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 s- }0 i3 X( l1 u/ T- }& p$ Y
0 i. L3 N1 r4 e3 x6 N5 W0 j/* assign the tl som board LED-GPIOs*/7 J! Y4 R' b5 O z" X: Z
static const short da850_evm_tl_user_led_pins[] = {
3 ]: ~2 ?) f6 l) H! O+ v /* These pins are definition at <mach/mux.h> file */ c; M& f: e. b( D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 [6 w+ h5 O( D2 M# C/ I. k# D. O3 E3 T
-1
$ L+ `! T: M* r2 `% Q! _1 l/ O; L};
, Z0 Y5 ]1 ?' u- B
- L$ c3 S5 N- q/ }% ~6 [static struct gpio_led da850_evm_tl_leds[] = {
& @6 k% g0 Y6 X$ k- \5 q [ {
, S- I( C) t* ~ .active_low = 0,
1 c: p: w$ ~) t+ n& k- G) r .gpio = DA850_USER_LED0,, m& K2 G+ r% ]+ I8 _# R
.name = "user_led0",
9 _$ p7 O" p) b! D' X' h0 I$ v .default_trigger = "default-on",
; E4 I [; \* U2 J( r: v },: w9 D# v, N' K" g4 w( I& ?* `
{
1 n7 E- Q! e, k1 o .active_low = 0," r( w! T7 N* V- A% L4 W" Y
.gpio = DA850_USER_LED1,/ E! q$ X' i# J% ~' J* R: b2 X0 H
.name = "user_led1",
; F9 T" a6 c) g- @+ ` .default_trigger = "default-on",$ V8 e4 y$ B' T
},+ }1 s+ x r C& ] b! V' o
{
; @9 U, }2 R J .active_low = 0,$ I. A9 }5 F2 L Z7 f) u: w( `
.gpio = DA850_USER_LED2,% ~# R9 _; c# K k
.name = "user_led2",* x- g" Q, F5 D8 x3 t
.default_trigger = "default-on",- J6 i9 S' k& p& G# P
},, C9 _* A1 i: d# \2 x+ {4 G
{0 L0 _4 H( k U- m# k# T1 n
.active_low = 0,; n& g/ a- W7 ]3 w6 z* s4 t
.gpio = DA850_USER_LED3,
9 R4 o( S1 s B .name = "user_led3",
3 Z& z/ l, S' b) e. y) v .default_trigger = "default-on",
6 T9 r9 Q) n: M, U },
4 [8 c/ @4 v/ W9 U};) s5 D7 a. B* Y3 M7 B6 Y( z. A/ X" ~
- R2 ]: D" M; ^8 `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { i6 e9 k3 y- w- a1 \# Q
.leds = da850_evm_tl_leds,
U* t V2 y& o1 N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ \ D# f7 ~( N- i* F' Q+ `};
; K& Y; N* j$ V7 Z l0 P6 Y5 v2 K. {1 `
static void led_dev_release(struct device *dev)
5 ^) t4 O, ]6 T{
3 T2 V2 Z1 w7 a};
( u; E! L" W, I0 x% ^, e* @% X& B, T6 L, `" K6 W% b. q& z
static struct platform_device da850_evm_tl_leds_device = {( x' |0 [4 u8 k7 k% _
.name = "leds-gpio",: t& t' r9 i5 f1 x. t, p# }
.id = 1,, r" R2 j, M1 J
.dev = {) W" J) c' m. I$ n
.platform_data = &da850_evm_tl_leds_pdata,
3 H! m o6 Q# C .release = led_dev_release,
: n: T9 n$ r. m( f( W# e! ]) Q' d0 U. v% [0 k } E W9 H2 |3 A# g% i' o
};% ^! e8 S) p8 f) i( Q; \
/ d4 q) b. k- b2 M" Dstatic int __init led_platform_init(void)
, ]( E0 z3 _, T2 J; l M{: q. d O" ^/ @2 `, [
int ret;
- c$ r) ]" }& V/ v; C+ t c- L$ o#if 0
4 L; b' G7 M. R* F) ^ ~( J' ]6 f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' q8 s" T/ V! g3 p1 t. P
if (ret)# e! l3 O, C3 D4 }2 P$ e+ Q$ }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; O& t# e' p6 J' K1 a( L0 F
"%d\n", ret);* @* l+ c' \ l9 H
#endif. B1 I& y" d' `) | f& V
ret = platform_device_register(&da850_evm_tl_leds_device);: z. E# T. M+ ]1 q
if (ret)
/ P0 H7 k. j7 Z* M; D% t* f! K1 T pr_warning("Could not register som GPIO expander LEDS");
% ?; T. n- E/ d+ t0 ] else2 k2 e! A8 @- \+ K' N+ y
printk(KERN_INFO "LED register sucessful!\n");, {8 p- f9 D) p( N
/ T4 H% @" D, r. U+ e+ J) G return ret;
3 b, B6 }( s3 c8 R}4 I# c" z+ I, V4 q' D" t
2 Z) Y7 J( V. d5 r" s% Z2 K2 Bstatic void __exit led_platform_exit(void)2 A+ s5 O6 D' M/ L0 f5 N; H% M# T
{
: f8 V- s7 c4 ^ N platform_device_unregister(&da850_evm_tl_leds_device);* `- u! j! ~* t8 t/ e/ k% Q0 `
6 _. T @$ r/ o printk(KERN_INFO "LED unregister!\n");
7 Z6 h* X* O* X" `0 M2 b- M1 h+ |. I}. V! D/ d" V( k5 a7 i
x3 |' E2 K! H# ^module_init(led_platform_init);3 X! T {/ m9 G/ F) p
module_exit(led_platform_exit);0 a$ j4 G. n1 P5 R! @) t. M
6 q% S5 y1 |7 q: w& \MODULE_DESCRIPTION("Led platform driver");
) X. _; r: d; b; w1 d2 A1 o3 RMODULE_AUTHOR("Tronlong");1 Q; H4 ], g) ^; L H: B
MODULE_LICENSE("GPL");
! K- C) X' G8 v4 b
V8 `1 g; q2 n/ b- K |
|