|
求大神给下面的程序做注解,请稍详细些,谢谢。; x: `; `5 y! I) A) M. q# Q
#include <linux/init.h>
. k& r; U9 u' V% Q' I( T#include <linux/module.h>
/ b$ I- l+ q9 ^( ^- C#include <linux/kernel.h>
( E' `* m4 F4 h( w5 K' z& X7 O#include <linux/types.h>: T; k4 A% l) y) A$ ]0 t @- s: ~
#include <linux/gpio.h>3 e! R" L( B% ^0 l
#include <linux/leds.h>
% i4 J C* ~3 r# X#include <linux/platform_device.h>- ^2 Y' ~! V( s$ p! ?
/ V) \" C9 I6 _: B9 c) ~
#include <asm/mach-types.h>' p2 `4 F0 B7 R. q
#include <asm/mach/arch.h>9 v/ F V8 F8 U+ a3 T' c- `
#include <mach/da8xx.h>; R3 s2 @, `2 U+ b/ u
#include <mach/mux.h>" h7 h& a. k. b0 m& `, o
. e& E4 U( N. G" f% G* I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ D0 i9 a% }* Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* T& b, c5 f' w8 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' B: ?1 p2 {, V/ u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) i1 v2 d$ P& [4 N
$ p7 Y3 H' X! e, U: ?/* assign the tl som board LED-GPIOs*/& I3 o* {' a8 j( R9 f
static const short da850_evm_tl_user_led_pins[] = {4 v6 u1 s X. L3 o3 @
/* These pins are definition at <mach/mux.h> file */; M9 L' |- b( k0 J+ R6 _4 ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 K$ ~. {! l: b
-1/ l ^! i& w( t6 Y
};' P! F; p- w0 R, C4 i3 x6 s' t
4 k6 c$ E( w o( K: S9 i6 O4 t
static struct gpio_led da850_evm_tl_leds[] = {: G: T# Y! V+ x5 [4 @& k- e
{& a g1 w4 _( B4 t0 p8 `
.active_low = 0,
4 I3 d& j: a) ~' C .gpio = DA850_USER_LED0,$ d: x+ S( ^; o: J
.name = "user_led0",
5 j X# X4 z1 s5 z0 N .default_trigger = "default-on",
/ U# M2 e# R6 N# E w },' h" V7 x6 I8 @. x/ z: J$ P0 F% m# T
{( H6 ?" H* f* u9 K- J" w3 s2 z
.active_low = 0,
2 M* S4 v4 n2 v .gpio = DA850_USER_LED1,, v9 n. W; a3 e! F" ]( b; a8 v
.name = "user_led1",
% m+ V5 M4 s# O( j! ?# \0 v% z6 j$ w .default_trigger = "default-on",
1 K. D9 L! k' ~/ G },
& c* _! G9 T! a3 p! e {2 k2 p7 p- s+ R+ A
.active_low = 0,
% H; @9 X6 @/ h0 m \ .gpio = DA850_USER_LED2,
0 Y4 C: K9 T7 r* _- {$ u- K .name = "user_led2",
( n7 Q8 T8 h; z! `0 }# s: S .default_trigger = "default-on",0 u# ]5 O3 m2 m) ^! Q. K
},
8 f! z+ L" |/ P9 a$ c8 T0 b {
4 n+ Y7 V: e8 t" m/ r* y .active_low = 0,; R* M, c. _" t
.gpio = DA850_USER_LED3,) Q+ c" h5 q! G4 V
.name = "user_led3",
! g( }! s# v( B8 Z, G .default_trigger = "default-on",
# s+ N% R3 C) ?8 ?$ ^% f( D },
$ q q. S0 I" t3 Q};4 y) o% i: j7 D$ v# I
, A$ n- t( D- S* o( kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ |( r8 I% T- h) Q. E .leds = da850_evm_tl_leds,) M3 V! F* s+ d' S0 R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 P$ b+ ]* E8 e4 V0 x0 H
};; Z& O9 y: J' n, G( ~2 \8 q0 a! a
9 ^" v- u* J( c) M ~7 V% W& c4 Dstatic void led_dev_release(struct device *dev)
" t7 }4 D. C' H9 {) M( \/ H, B' E{/ J6 M. ~. `8 n; H# v
};9 c m B" R, V% ]& \' p/ Q
( C4 }# g: S& d: `; ?
static struct platform_device da850_evm_tl_leds_device = {
2 w9 v, o/ ]8 d# L; v& j7 C, b+ G( G4 Q3 | .name = "leds-gpio",
) B j3 B( Z8 P$ f0 N .id = 1,; k- N/ _3 k0 y: K. p
.dev = {3 g6 C& c& Q) y3 |
.platform_data = &da850_evm_tl_leds_pdata,0 d! K+ e; A, {9 V' A8 }2 ]: O
.release = led_dev_release,. r0 Q7 {* T8 ~6 }
}5 u4 ~4 s5 g/ C5 k, o
};( }& h7 v- K% `6 C
7 U( E. X/ t5 c6 w4 G9 ustatic int __init led_platform_init(void)
6 T: U. ]( ]. g3 f4 X; Y/ ]{
" v7 \6 _; b& p& q3 P int ret;
$ P9 \$ T+ J" y+ `3 z#if 0$ q* j) x2 f, i+ a6 F C0 f! S+ a; }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- B1 y2 w# }# A( Q
if (ret)8 T7 _5 h: }+ `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ l" y) r y4 o- M "%d\n", ret);
( A9 ]6 `% O! u* B" s1 Z#endif
! B4 b3 L' d' Y2 _8 ^. K3 G8 o ret = platform_device_register(&da850_evm_tl_leds_device);
3 q) L' r( k$ W' v: ^+ G2 g. y if (ret)
/ [- u! b# r$ V/ ~. u% K pr_warning("Could not register som GPIO expander LEDS");
9 I; n$ w: H. L( w1 v" ^ a9 O4 B else
1 h1 `; a- Z H; `/ x$ a' { printk(KERN_INFO "LED register sucessful!\n");
! M8 t4 y0 W% p" l9 U1 j+ \4 [" e! I& @6 ?9 L w
return ret;
! D' k/ d1 K5 T) R7 O- ^}& I8 Z: T# v6 d0 |/ e/ J
, y) ?, q7 G, ` _. Cstatic void __exit led_platform_exit(void)( F- ~7 b B& O- o) z) H
{" {. f: M: x/ `5 r: F6 y; ]
platform_device_unregister(&da850_evm_tl_leds_device);8 R+ X' D7 `/ y
3 _$ `) w. o8 q+ A) c printk(KERN_INFO "LED unregister!\n");4 ~7 W. C0 t5 O8 R: J: K3 l6 X
}( k( w/ B& }" w% |0 @
5 v" t$ P% u, X0 ?: k
module_init(led_platform_init);7 B4 k2 W; ]9 H7 i. {6 r' y
module_exit(led_platform_exit);
2 G) V2 W1 @8 k! z$ w" S5 G$ j! q. l' I( k, i
MODULE_DESCRIPTION("Led platform driver");
* d4 N" `% @8 @" CMODULE_AUTHOR("Tronlong");# ?. `2 n& [/ E$ j( k! K" V x
MODULE_LICENSE("GPL");
2 v+ v7 }* z x" H$ H( j
( C1 ?4 p Y. E7 Q, L. j( L( R |
|