|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; f" a9 k1 q4 ~& ~& N+ w
#include <linux/init.h>3 k( @6 o5 x# u4 d, h
#include <linux/module.h>
$ {7 q( W N/ f/ K1 N' K5 o a' O$ l" i#include <linux/kernel.h>2 u$ P- r2 H* p8 b: g$ |- n
#include <linux/types.h>0 s" i2 p. W% A
#include <linux/gpio.h>' Y, n" {- j) Y8 m3 {
#include <linux/leds.h>
8 ?" L* s* w1 ]7 [1 z) R#include <linux/platform_device.h>
* M: d/ e( w0 k8 \( v5 w$ m" X+ u* U, f u x0 O
#include <asm/mach-types.h>
8 Q4 f8 u; k: y4 j1 \# Z1 D; b5 ?#include <asm/mach/arch.h>6 Q" S0 @% Z+ ^0 y- j7 D
#include <mach/da8xx.h>
& n( E# J1 L) r% ~. N# Z#include <mach/mux.h>
1 M. ^6 j. t7 a+ T
y9 {" c+ ]0 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* d6 x8 r! n Y6 I4 t( W; ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ `* A7 z+ H, I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, j, E! x7 l3 w) m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) L/ H1 p$ Q/ W
7 a) I }/ f# g8 k
/* assign the tl som board LED-GPIOs*/9 S! l, o0 j+ R$ {0 G2 V
static const short da850_evm_tl_user_led_pins[] = {- s0 y* B& u" j! _1 b# j
/* These pins are definition at <mach/mux.h> file */
1 x: i( y: n! j1 V+ h9 _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. A' ]7 c8 F! w" V- A
-1* P" c6 W+ e+ U. a* y& r- I
};
: V- y k( R/ m0 K3 F: S/ T& h# \4 |
static struct gpio_led da850_evm_tl_leds[] = {
q7 v9 }+ c$ [+ v: a- B {
4 M" O+ V0 A/ c. k .active_low = 0,
, {3 n, \2 p6 q .gpio = DA850_USER_LED0,
1 a0 q$ `9 h/ E* m .name = "user_led0",
; `) ~" l- F& U3 d0 j2 M .default_trigger = "default-on",5 a( {0 D! J! D n& n7 V8 D M/ ~
},
/ [ ]6 b( v6 e2 R* ?% u! g/ h% S4 K {- m. {& S0 _) @6 j
.active_low = 0,
$ D& J+ j; A$ }7 ]& w; N .gpio = DA850_USER_LED1,0 I5 d& C8 l, Z
.name = "user_led1",* n" T: C5 K f/ F
.default_trigger = "default-on",
: u. |6 u4 X: H },
: Q1 Y8 ~+ N/ \& q" y: ]2 N {6 |1 m2 q8 L; V/ |3 l9 s
.active_low = 0,; ~/ }- u! _' g% ~0 t) E/ { W* i
.gpio = DA850_USER_LED2,3 Q# j5 {% i% G
.name = "user_led2",
: D; R& p% l# y& y+ E$ M* l .default_trigger = "default-on",
1 J. d7 z/ }; b$ {1 J" r4 e }, E# F6 M; E% N; i2 u3 |
{
9 y2 d( ?1 I" w+ ^1 N) ` .active_low = 0,
" n( J& _8 h/ K: H" c2 X6 C .gpio = DA850_USER_LED3,$ M* s! z) H5 J. M. Q) D$ b4 Q
.name = "user_led3",3 B* q H7 k0 A0 Q- P
.default_trigger = "default-on",
, y7 U, P# u. k& M0 n# } },0 ^& z+ U; A# m, I
};
$ X5 T/ {3 |" s" \! R" y# f2 b" O6 \, e. M( ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 E! o. y$ D `3 e$ b
.leds = da850_evm_tl_leds,( e0 k, k+ J b1 {' r8 P- l6 q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 q, l0 ]8 y/ ], W6 P1 G8 c};
. {6 ^, R i; x: F- `
; Q" R. ~; x5 pstatic void led_dev_release(struct device *dev)7 S, `0 t5 }8 @! Y) o* y: y% u t
{' }( H$ Y/ W# e$ T
};5 ^" _7 E, N4 p5 Z1 _4 i
' F5 a" ?" g; y% wstatic struct platform_device da850_evm_tl_leds_device = {5 G7 W/ G' K8 k9 ?: U; _* k
.name = "leds-gpio",
! L+ T& x2 G4 a .id = 1,
3 ~" Z# J6 F/ _2 g0 a% y4 {) O .dev = {
+ m! g: C* N* M, t5 k9 a! e6 ^( v; ^ .platform_data = &da850_evm_tl_leds_pdata,
/ y: k2 Q4 A* z6 h. D .release = led_dev_release,/ g! F* I% m; b: O0 K9 `
}
1 b' I1 a" X' l: J+ O' j* T+ w% i};! Y* ^, X. P2 Y& S# W+ E2 K
- l, L5 [* N1 z" P* P9 v1 v
static int __init led_platform_init(void)
' j9 |4 [# a! p{$ b, J7 o0 _( \- S5 y0 _! }, l) `
int ret;) {7 J' |. ~- v, z! b3 w$ j0 _
#if 0
. s9 j7 X3 G$ B# a8 ^ \; h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( m7 M& W9 o; Y$ d. ]/ ] if (ret), z- r/ s0 }4 d, p$ P& e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") _- y; R) P. S. Z9 i6 R" L
"%d\n", ret);' ]' O" d1 y0 ]8 p5 {) }: n
#endif
7 ` m6 C- M, W7 X& Y8 S ret = platform_device_register(&da850_evm_tl_leds_device);$ k9 }) l( v5 t* Y, [0 L5 o
if (ret)- u4 q5 i1 Q, P0 j# M. `( i( W
pr_warning("Could not register som GPIO expander LEDS");
, l a- y" v+ [1 z; h else
& k# g8 Q3 O r& ^ printk(KERN_INFO "LED register sucessful!\n");5 _/ v9 V1 C5 L2 _6 z- Z
/ v1 d) L( Q* f% g6 ]" i return ret;% D9 S' o/ p, I% Z/ f2 R l
}
$ J5 F- n# `1 w( ~7 f4 t( E6 N% d' z5 N( Z. p P
static void __exit led_platform_exit(void)
( m# z9 p5 G% k2 l, Z) _) n# B{; I# i8 Q# S, M/ r7 s l; l+ y
platform_device_unregister(&da850_evm_tl_leds_device);0 O3 R1 h3 \1 q2 z% m' c' W
% f' A0 r" d1 w$ R; R0 p printk(KERN_INFO "LED unregister!\n");
. ] _4 S1 o. Q8 p4 L, N}
$ V- M; S( y8 V3 J+ r/ s) |, `7 r# i" i9 C1 N
module_init(led_platform_init);
+ t9 \" p! _$ e7 smodule_exit(led_platform_exit);
# f L7 _' {! j$ \3 t3 t& y4 `# ^; E% N' A: ~
MODULE_DESCRIPTION("Led platform driver");! E& v$ {- l) K F
MODULE_AUTHOR("Tronlong");
2 w9 ^9 L* q: T+ K& S- s9 rMODULE_LICENSE("GPL");
( n0 P; n, \; X5 a' t/ n p, ~3 ?) {* U5 Z! N" N d2 W
|
|