|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 S" i4 C+ K9 e6 X3 I#include <linux/init.h>: Z% C: r$ D! K; {* t% G
#include <linux/module.h>
) u( B# ~! D6 M' d I* X1 c e2 H#include <linux/kernel.h>
+ o; i( V/ u' l, @1 P#include <linux/types.h>
) J |# v0 C& Z7 ?& `* q#include <linux/gpio.h>- A& Y3 s# E4 c- V- y, t
#include <linux/leds.h>% @+ ]4 X: L( J/ y3 c
#include <linux/platform_device.h>" a: }3 `+ K* G% T% L$ n
" E P4 m3 b; m3 R) D' `
#include <asm/mach-types.h>& \, j& O; d0 r* a" L( m$ N; D
#include <asm/mach/arch.h>
! b: u! J; t: O; v% c1 c#include <mach/da8xx.h>! y9 X6 m' b$ C! }7 _6 e
#include <mach/mux.h>. H2 A1 h7 q6 H
$ o- f5 D, i; F( b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 d) T- x# ~3 n5 S, v" v: C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. z$ ^- e2 M8 e" _" i. e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 o2 Z( `- w3 g, z( x+ g# b1 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ h% u" j9 {' a) F ]7 N1 _" v& n6 `6 A; ]$ y: v5 h
/* assign the tl som board LED-GPIOs*/
0 [2 [% k. f# l4 t5 jstatic const short da850_evm_tl_user_led_pins[] = {
) O+ O" T7 [" t0 v /* These pins are definition at <mach/mux.h> file */
. ?$ }. f: N9 v' f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% M* q% M0 ?! W9 y8 d& n0 `, c; o -1; J2 c( P; i$ d( B3 q
};
1 E' t4 h* |' ]2 [/ }" h8 r3 |! _- T: @1 h& B; }: X
static struct gpio_led da850_evm_tl_leds[] = {( k* Y( e; N# @6 K+ w6 u
{
' X4 i+ q. b& f .active_low = 0,
7 i1 [& T3 V. E6 ?- ` .gpio = DA850_USER_LED0,5 `. t9 z8 w6 X& ?& h" b
.name = "user_led0",6 w" Z5 _/ B5 }8 J: g( d
.default_trigger = "default-on",( f6 v" d" ^8 w, j W, o
},* G- T5 j, V+ g9 j" a$ e% U
{% n5 `3 S- q# g
.active_low = 0,
1 N3 ^' M1 U3 k! l. W .gpio = DA850_USER_LED1,
7 D, {/ ]1 h4 f) h .name = "user_led1",/ l: W- ?, j1 v4 H$ [, d
.default_trigger = "default-on",4 ~9 i5 P' c8 E$ H/ E5 @% M
},/ {5 \* M, c g# U/ L/ \( Q
{
0 w2 W4 W J2 r X% ]1 a1 d .active_low = 0,5 Z# L* z8 A& o' T
.gpio = DA850_USER_LED2,
+ R! c# r D2 c' M4 D .name = "user_led2",2 f h7 b" J( Y4 a/ E( u
.default_trigger = "default-on",
3 D- p5 s5 @) r+ k( c& k) H- C$ m5 g },- g; x, A8 L% K( z+ C8 I
{# F# P& H, l- B6 N! z
.active_low = 0,2 `& c1 h: S6 W; A
.gpio = DA850_USER_LED3,
$ c8 H" T2 Y2 s# I7 q8 w .name = "user_led3",1 E; q2 L, d! R v+ Q" E
.default_trigger = "default-on",
' U/ z8 B# e; x* U },
) d* h7 [# u+ D' `4 @, _( E; [};( K8 F) s' ?" M6 E
4 c& u8 W3 K* p3 f8 @' p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, y- X. B; ?; O' S4 E
.leds = da850_evm_tl_leds,& i, c w( e% G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! |0 ~- Y- j4 Y V& U; X};
% T8 c$ h- R& P8 F" [+ f5 a$ A' s; y5 _/ B; x# F( k% n7 c8 ?' u
static void led_dev_release(struct device *dev)
) G i( ]. l$ f$ I+ E& q{
9 T/ i5 W% v0 H# i+ e& L3 N};( B2 r+ n( F3 K' P L7 F' g
( b1 B' a. r6 A3 E; p- V* I5 D
static struct platform_device da850_evm_tl_leds_device = {- \0 V) S- j! b8 e' P7 @" X& H- p
.name = "leds-gpio",$ L( \. Q# u6 a) S# }
.id = 1,$ v- S& Q/ x. @) E) C
.dev = {
3 z* q. K* Q2 G& H! q7 i .platform_data = &da850_evm_tl_leds_pdata,
9 I- i0 H% ^& l% r: p- E5 I8 v .release = led_dev_release,! Q' Z Y+ t+ C* I8 I* g
}% H" r; v4 ?( G
};, V7 @5 h5 ^# w) ~% A& f
7 P' a) D1 S: G) V. j+ F8 o" @/ estatic int __init led_platform_init(void)
, `! [% V8 j# _9 y{# I4 c+ p9 d$ ]
int ret;
! H& \- b6 B! e) T#if 0
6 ?( M ~* h4 \$ ~) M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- s4 z7 r; ^6 d1 t, f if (ret): L) w% S, ]. k+ i {4 x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% S1 e9 c" r( o" v/ @( H* ] "%d\n", ret);) `" ?. D r" w' `4 `) R4 y3 D
#endif
' ~; }+ A* p! [ ret = platform_device_register(&da850_evm_tl_leds_device);
0 y2 k$ l8 X* S$ \2 y+ ^, Q! q2 @: R9 z if (ret) }1 t$ w1 ~% W& i
pr_warning("Could not register som GPIO expander LEDS");' Y/ x: m% K7 f) q4 o
else: e1 S, l k3 M. i# @& u6 E
printk(KERN_INFO "LED register sucessful!\n");
5 T+ R+ w, e( h/ r* C2 T" R+ {( L/ R$ K5 x7 V$ x
return ret;- s& C; @, Y7 z0 U! |6 I5 I
}0 O8 I/ i3 _- E: U
4 ^0 Z7 r. [, t! _9 R; f9 Lstatic void __exit led_platform_exit(void)
! p6 @2 m, w- R% u{
& z R) s8 `$ G5 B0 I. [: G/ F platform_device_unregister(&da850_evm_tl_leds_device);. c% ~( u0 p$ s9 ~
3 J% N5 W! K) n! y4 Z. S! Z printk(KERN_INFO "LED unregister!\n");
, @9 k0 P4 H/ A}
[1 m; _* H0 ^6 w: p, J' _
! v% f+ H: o; {. ymodule_init(led_platform_init);0 x$ ^! i& c: t' n3 Q
module_exit(led_platform_exit);/ C9 C- H( v- B" E4 T' p
. w4 [" |, c, G9 b7 }) T `
MODULE_DESCRIPTION("Led platform driver"); {$ B* i! h; `" y. a2 `. [
MODULE_AUTHOR("Tronlong");) ] ? o, i) n+ B* t+ W
MODULE_LICENSE("GPL");/ o5 d# l8 `( S3 D! V0 r
# ?" l5 r+ I W W5 B' K; J
|
|