|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ a' f& n, s" {, T#include <linux/init.h> p2 X% c* I$ D1 k# }. j
#include <linux/module.h>
8 `7 A7 v, T: f#include <linux/kernel.h>8 y! v: J# Y/ o% r$ _$ m9 W& x
#include <linux/types.h>( `/ Q( _9 u d; F
#include <linux/gpio.h>
2 o: n6 \: p5 X! Z# l# O1 w. p2 `#include <linux/leds.h>
: `! l- v$ O. D* ?# `0 ^ W$ q#include <linux/platform_device.h>- I; W% R+ |. _) i* W2 Q% C0 B
# ^# j! X, u- Q+ z+ t#include <asm/mach-types.h>
# Z8 R7 c' ?9 z- r8 ?2 g#include <asm/mach/arch.h>3 s @) E g2 V" _
#include <mach/da8xx.h>" c/ b6 f( q5 u a7 z
#include <mach/mux.h>
' M+ F% m3 z( f
h! W( v. V! D, u2 I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! M$ m+ S+ N( M C* x5 ]* n1 b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 X5 i+ n5 A- k: W# X6 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) G2 | e0 x$ I: H( M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 L$ L3 |1 R) Q2 m* x: ^ n
' R5 i8 f! f; b ?! @. o/* assign the tl som board LED-GPIOs*/
- V0 ^- ^+ ?1 U2 a/ qstatic const short da850_evm_tl_user_led_pins[] = {7 Y8 H- f7 ?! ~
/* These pins are definition at <mach/mux.h> file */1 Z' [6 v/ M& V8 |8 a8 ^8 u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, `3 c9 c, D. `9 ` -1( |) S( o0 I K* W9 Z- [
};
8 D0 o; ]# m" S: b4 v8 h$ m; {0 |3 Y/ ~
static struct gpio_led da850_evm_tl_leds[] = {3 K9 D$ C9 J* |, W' D
{, D# t; S% v, }2 ?! {
.active_low = 0,0 _, _0 G3 {+ O9 y5 ]0 Y! [
.gpio = DA850_USER_LED0,2 J( i1 c; U: ?( h& g
.name = "user_led0",$ t- M% |/ ?( E" t
.default_trigger = "default-on",3 e4 [: J2 J2 r8 H4 @
},
4 V" e- ^2 C4 ~3 u {. B: n K* @. n7 u8 ~+ n
.active_low = 0,
+ i+ d a1 t; d7 I* Q; y .gpio = DA850_USER_LED1,
% I% O/ y6 \$ \" s3 C0 m7 a$ a' h2 F .name = "user_led1",; N* t! G7 v$ h5 q
.default_trigger = "default-on",: T% s; D2 ]* B8 X" G3 a/ Q
}, ]5 a4 w9 j ?" H5 h
{
0 Z: f8 o' x0 G0 ^0 j .active_low = 0,
. E1 z* ^3 D/ z$ t9 B2 { .gpio = DA850_USER_LED2,
2 `* E1 {& t U F) y .name = "user_led2",
1 K$ o# d* B+ N. R0 {0 y .default_trigger = "default-on",
1 w% w: [- m1 B" ?% M4 H },: N1 W- t: | [8 z$ G" @/ [7 |5 M
{
! H+ F( ]; p/ Q" x0 ^% G( f .active_low = 0,
0 k8 ^7 D* [# } .gpio = DA850_USER_LED3,$ a' Z- m9 `# U* m
.name = "user_led3",9 |! U; N3 e! V* \6 T- x6 s( h. q
.default_trigger = "default-on", M% H2 L) Q' v0 A! W* p( q U4 ]
},, r3 u& ?2 L5 a* Y
};
8 Y9 K" P* ?( \% H3 k$ R" _& o# s% q" S# C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& Y# K/ {, @7 p$ t Q9 {9 L- R
.leds = da850_evm_tl_leds,0 R" b8 F2 l) e) {5 U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ v- O: T( ?9 J! `& R1 N/ \" V};
$ ]2 ?; ^+ n8 C& V" q5 ~
6 p: \1 X; t/ kstatic void led_dev_release(struct device *dev)
6 H5 `2 a/ Q5 O- Y5 x9 J{+ S1 g- B- h' G. l6 P: j* p( A
};; @/ v. m r, f& I
( S7 E2 C4 O1 hstatic struct platform_device da850_evm_tl_leds_device = {
3 D( X' {" K1 n7 D H) f .name = "leds-gpio",; A0 a% L/ _4 Y
.id = 1,, C* t5 `/ C# a* y1 j; o
.dev = {/ _. R; M* F7 q1 `
.platform_data = &da850_evm_tl_leds_pdata,
1 x3 M2 {7 e' @- i, l) v .release = led_dev_release,
# v& k8 \* Z5 Q& R6 ?% X" |, N }7 p7 ?" s: F& d7 `
};7 ?# T5 u5 `$ Z6 s
* s; u& i' M) p# @
static int __init led_platform_init(void)
5 R( g; b1 \2 @- e" z2 v' d{
/ C3 R7 q' F: R" G; d0 [ int ret;
' v2 o O" z/ J# \4 d#if 0
- _0 g$ g* M4 W( J8 l' U; e" Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, V: `" E u0 b @& g! r2 V
if (ret)) u8 h7 }8 O" O7 `) R8 U8 R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! L% {( K8 h: e( k0 o3 r1 _8 [ "%d\n", ret);
- t- b% D9 z' H4 H#endif
, G S5 }5 d6 ]' o/ n3 B ret = platform_device_register(&da850_evm_tl_leds_device);
; H, @/ E9 ]8 R8 Z# X1 c0 e* ~ if (ret)
* \1 Z1 q7 _, E# P5 k, h$ F+ X pr_warning("Could not register som GPIO expander LEDS");
" @ c. F+ H" u0 y2 u3 G/ z6 E' j else
R: z5 x% {. |7 w7 ]$ }0 C printk(KERN_INFO "LED register sucessful!\n"); X6 J. ?' e/ N+ H
. j5 H. [7 }9 x3 ^( _ return ret;
& A& x& N: n( Y}
1 |9 M8 m0 X# }9 [
$ F: C$ {1 O1 Q3 K! @static void __exit led_platform_exit(void)
6 e$ _# j, F. w& W2 ~* a% }{
; G- [1 [$ P5 g s2 D3 Y: l platform_device_unregister(&da850_evm_tl_leds_device);
. |. X V6 O% s1 r( Y. u. {+ l- L6 v* T" h. h( P
printk(KERN_INFO "LED unregister!\n");
. i0 R; {, u F. _1 y' [6 N& E}
2 h" F7 `- k0 o1 O5 I
- c. ?6 s& i- h6 emodule_init(led_platform_init);
) `( d% _+ y4 Z8 B6 Y$ Xmodule_exit(led_platform_exit);
A, r1 O- M% F+ I5 |; P. Q I/ D, n! J u; ^& C
MODULE_DESCRIPTION("Led platform driver");
7 y# P. B) ]/ NMODULE_AUTHOR("Tronlong");3 S9 E0 P6 T# H& i: l
MODULE_LICENSE("GPL");" s3 C" I- _# W* `7 }. ]
- K; E3 q# M8 `2 ~' H
|
|