|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: @! Y- G+ P w H: O' ^
#include <linux/init.h>
6 w6 ~- k8 A; p# H4 V4 {#include <linux/module.h>0 H q4 G5 ? Y+ l& O$ t& m
#include <linux/kernel.h>
8 ?& q7 M# b, p#include <linux/types.h>
, Z' B, e6 ~/ I. a8 v1 q#include <linux/gpio.h>4 n9 W8 |7 ~: Y6 f4 S' X( }- ?4 N
#include <linux/leds.h>) D# J% E0 j8 z8 H& l7 ^6 g
#include <linux/platform_device.h> x5 T1 q; O# W& O9 `7 z! Q
8 D2 `* l$ {, N$ w: L#include <asm/mach-types.h>( U J( ]. m6 u- v0 Y
#include <asm/mach/arch.h>4 J& K3 P7 F% |' \/ |) o# X0 i
#include <mach/da8xx.h>
7 v/ n4 E" n4 B1 o* D+ i#include <mach/mux.h>+ Z$ l6 `+ E2 w6 j
" h0 a% R! J, I& q ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! N6 ]* E0 ~- P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 W/ a" O1 l$ }+ P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( X% \$ v* H* \4 b3 ~ a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: Z$ j2 q6 a* E2 ]: _. }: P% |0 p+ r. t3 p2 Q/ a
/* assign the tl som board LED-GPIOs*/# y4 ~5 {5 E& d2 w9 [. m% n! Z% V- I
static const short da850_evm_tl_user_led_pins[] = {
0 B3 m- G4 e. v9 T /* These pins are definition at <mach/mux.h> file */& J% D5 c" `, D# q9 U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, m& r# b( M/ V7 z! {5 _ -1" d' H5 M. a+ M; G; _1 p+ z0 I- a
};
" G6 J, J0 K( b0 A$ y& S- X* V6 `0 f
static struct gpio_led da850_evm_tl_leds[] = {. [' H0 T+ e1 B- b6 O
{
/ @( V7 J- {& ^3 j9 Z2 N .active_low = 0,
y& o0 p# o) D" I) s .gpio = DA850_USER_LED0,0 E- u( g4 J* h; T9 ~# E6 [
.name = "user_led0",9 S" m" M1 r; l- Q c
.default_trigger = "default-on",: w `' d7 l* _+ `+ D% Z
},
3 `/ H4 q% w) S3 }( z4 l( A1 } {+ ^9 S" ~1 E: g2 x
.active_low = 0,( ]. l( r9 j9 D6 T/ l' \4 \2 j
.gpio = DA850_USER_LED1,
4 A. h' R9 ^1 d .name = "user_led1",
8 L3 o4 U( N" Y) p; ~ X) [, h+ Z .default_trigger = "default-on",
4 x* g8 p( h( O },
8 P& y% x4 b% B" ~, z. S% h M {
: A4 E2 Z- R2 j. W" H- C, x; X( L .active_low = 0,
8 l; ?6 W+ l4 c! n: `3 G .gpio = DA850_USER_LED2,& R$ ]" N( H1 F" k; Z
.name = "user_led2",
* d, B0 D0 j2 y5 b5 [$ |0 c( K: { .default_trigger = "default-on",! L% k; Q5 B, N' g' I; D5 {
},! ^9 h" j1 g7 P4 v1 i8 P
{; [: H1 z9 x9 ^) \+ ]2 g
.active_low = 0,
# X7 d# X O! o/ b0 U4 `# `& ] .gpio = DA850_USER_LED3,1 i% i+ ? w( `- Q
.name = "user_led3",: b2 E5 H1 r" Q# W0 q- N7 q1 `
.default_trigger = "default-on",
) P+ [( s* L& S% { },% }8 z( |- L" ^. G. j- Q0 H" H, a
};
/ A; z; P6 y# V+ |) u6 _, o( i' ]
1 _8 o t, o! |, V! r1 `6 ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* Y; D2 r* `0 l% r2 N& m, U .leds = da850_evm_tl_leds,
: p# `, R" u$ `) |5 E" Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ g2 d4 a) n* E};
0 P' k) W& }& a4 L: h
$ K/ K' ?; j$ ]4 m* r; @- @8 cstatic void led_dev_release(struct device *dev)
- A/ p' o- K1 T( V3 j' P{
: u; e9 I& X! y( K) x/ n};
' S5 E5 X H4 ?5 }5 Z9 @7 t2 N Y/ j! p
static struct platform_device da850_evm_tl_leds_device = {
9 h' v! O% B; a! N, s5 D% A' b .name = "leds-gpio",
* f9 E8 S7 G1 o" v* D2 [0 R0 s .id = 1,
% l0 i5 Y8 [3 [9 o' H1 {* { .dev = {
; W- D4 D. f% u6 ]9 ?3 J .platform_data = &da850_evm_tl_leds_pdata,
! _" A$ z6 s2 @2 s$ y. H* Q .release = led_dev_release,
; t' J9 N0 @! ] }
0 b3 u6 T& D) r( m. w};
( e) i/ L& _# P" _6 X( _, {: t7 d' k, C: O
static int __init led_platform_init(void)+ G" V8 ?/ n) P5 X7 a
{
& w% x8 y6 c" ~/ g1 m5 v int ret;
3 w& I! d" I! y; S2 ?#if 0
8 S% i8 X& [- E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" s/ q$ y( x5 Z; k' T if (ret)
+ v" d- |- W/ f/ J, I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" T, l' x2 u/ i" U, ~
"%d\n", ret);
6 k' @) _9 T6 ^8 I$ L$ |, g" [5 R#endif) R* _8 K- V1 s- a$ T# B7 @- h
ret = platform_device_register(&da850_evm_tl_leds_device);
& N% [' V2 s) }2 | _9 m; c if (ret)6 i8 z% x# h: O0 M( k
pr_warning("Could not register som GPIO expander LEDS");+ Q' |: V5 ]* t9 u2 C
else
; W: _, K8 b" O2 g H: `( T ` printk(KERN_INFO "LED register sucessful!\n");
: W; w9 x' S0 ]7 Y
: Z1 |6 _9 |# O0 a3 M( M& A8 e8 w6 L return ret;% x; C4 @" E2 V( p
}0 a* e+ w$ b3 u) H4 \) c
* K8 P; F3 o t! v5 [" y3 {8 istatic void __exit led_platform_exit(void)
9 d4 L; z0 A$ |$ ?: P. \2 k{! h6 m% P0 D& Z0 B& l
platform_device_unregister(&da850_evm_tl_leds_device);
" f, g0 v5 t, x* \( ^/ L' N* z: e2 R8 r$ X' P# D7 b
printk(KERN_INFO "LED unregister!\n"); k8 g4 d/ G; G) K/ b
}
+ |5 k, X/ ~6 V k
, ~9 y4 I% d/ l1 z1 y5 Kmodule_init(led_platform_init);
$ b3 y& A, `; S' A0 C/ v" X7 `module_exit(led_platform_exit);
0 a6 \- i" |$ h+ m* x5 P
! j" o7 K/ ^! s( LMODULE_DESCRIPTION("Led platform driver");: G: ~1 J1 V8 s
MODULE_AUTHOR("Tronlong");
& z: T x4 i T0 e8 T: [% xMODULE_LICENSE("GPL");6 g$ x8 O+ v3 u/ y: K& r/ N
' B6 I7 e' J1 s% `5 f6 i5 s$ ]7 z3 b
|
|