|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; f! I, e* F- Y- n; L7 }, Z#include <linux/init.h>
$ N7 p% ]& B- g9 l% D#include <linux/module.h>
5 e6 m5 g9 u- z#include <linux/kernel.h>( T/ q, ~2 }2 o5 H3 {; j! F! e
#include <linux/types.h>
7 ?; Q: K! {: N- m7 t. R1 s#include <linux/gpio.h>
# z# x# y0 b- H* v9 ?#include <linux/leds.h>7 G! n' S8 k5 m9 x7 Y
#include <linux/platform_device.h>
, U" D& F4 w! p
6 B5 _! A7 K$ w+ E) ]#include <asm/mach-types.h>
8 C, F# p) u1 @6 C#include <asm/mach/arch.h>
2 U$ \8 P' d# d+ S, W/ @# k#include <mach/da8xx.h>
% G( J5 v( B& K3 O#include <mach/mux.h>, n& e* U% Y f5 Y
, O; h: G- w" M: F1 a* X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 M9 I) h8 E) c$ F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 O5 V- r0 E7 B, D8 H9 s+ T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 T! S- V" v' G( I1 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); G, B) ]2 k6 p9 q; e! ?- n
3 _( R0 F2 z1 |& p/* assign the tl som board LED-GPIOs*/
v9 t' `) F' U/ Sstatic const short da850_evm_tl_user_led_pins[] = {
- f7 D5 y' ^: f" m& r9 q& w /* These pins are definition at <mach/mux.h> file */
3 r, h4 O% q& ^( R. X( K& O3 x" v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; l! ?, J! ` O' N( d
-17 P* H$ ]2 @/ i9 M6 u& G$ X
};) Y2 N$ Z1 u* U# P0 r
, ]7 Q" B m# M# e8 Mstatic struct gpio_led da850_evm_tl_leds[] = {
3 D0 ~+ r9 k4 |5 q$ P6 a {" O: M, n, l O5 h$ @* L) u
.active_low = 0,& P3 E- ~. G6 T9 v7 q. S8 A) t
.gpio = DA850_USER_LED0,# X) A7 m- ?6 y3 i% B$ {; N7 O
.name = "user_led0",7 ~# |, B6 ?( C _. c2 F
.default_trigger = "default-on",
, x7 a% A& N6 B5 q7 g$ T4 \: U },& O7 o2 h/ J5 F: G& C
{
" f P1 B0 @$ y* x0 N9 n8 W .active_low = 0,8 e! P1 {9 S8 s5 z8 C
.gpio = DA850_USER_LED1,
! I. F( m. N8 j3 i! L9 | .name = "user_led1",$ P6 D: M5 Z S3 B
.default_trigger = "default-on",
& D: O( Q: x0 U& y) k },
. K- U2 t# n- z( o' H& G; a {
8 }2 r' v: u P3 ]' j: u# A2 a .active_low = 0,' G" E2 \1 X. Z6 R4 S
.gpio = DA850_USER_LED2,; o8 y. t2 ~/ q5 c5 T6 m6 j
.name = "user_led2",5 \, u2 O3 W( v8 B5 W
.default_trigger = "default-on",2 j% f% K* n* P, T2 g! I
},5 w1 S( h7 D+ {9 v% s
{) H( r F7 t- ^) V; V6 q9 I; s
.active_low = 0,
" O! q* m9 \$ r- f# m- q .gpio = DA850_USER_LED3,& l; @5 T/ T. f+ m4 K" ]
.name = "user_led3",1 ~. N( {+ Y8 D, S
.default_trigger = "default-on",
- V* @/ k8 I; a- ] },
5 s' H0 L- a) V8 }5 J9 S};
; j) \! S7 T+ |8 a
& b- G, E& k( S" e- Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# M# d! [* e# f0 { .leds = da850_evm_tl_leds,
1 {+ V+ G$ [4 e2 l5 c) o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 O, u* K9 Q1 G, X};
1 w* Q4 U" a7 q
, Y' e1 o0 v; j+ G- S% `static void led_dev_release(struct device *dev)5 ]0 q& w2 [5 S. s( r+ ~" L' Z" O
{6 ?* P* o! |+ K2 D9 j% u! s$ a
};" {6 b1 Z/ x& E0 b" e
+ @& y+ W% h1 g5 Y% t, _static struct platform_device da850_evm_tl_leds_device = {
4 @7 M) h; A" e5 M: s: e* J! P8 C .name = "leds-gpio",
5 z3 K: ]! V! M2 r: \2 K .id = 1,# F3 L& t- G* j' r l% F. {5 G
.dev = {
4 o# H% G& f" D. K5 ?; Q/ K: f% L .platform_data = &da850_evm_tl_leds_pdata,
( I. U$ X6 G7 Y! x& { .release = led_dev_release,# g' D: G9 @3 x( V# j/ x/ x
}) m+ C0 g( @. J" F0 K8 ^% u
};
% `: P4 Y9 D7 k! j; K8 `. U T8 p( ~" x8 A) C: Z+ }7 C
static int __init led_platform_init(void)
6 g1 |3 j; R; G# N' {{
% H! E/ @3 n+ r int ret; x. T) @- r) j0 @# Q. B
#if 0
{7 f+ c+ x! l$ v$ r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, W( A7 ~; M# U; T8 `; n
if (ret)
( ~0 P( G: p3 d6 a0 B* W# O: g4 Y% Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 g! [$ k* q& k% i8 @/ ~
"%d\n", ret);5 d7 V- Z2 H/ `- S: O
#endif
: m& v$ W& f0 ?1 b ret = platform_device_register(&da850_evm_tl_leds_device);
2 j6 h$ X5 {/ h. y4 l8 U6 e5 { if (ret)! W8 z! A8 W; F* J1 F7 y
pr_warning("Could not register som GPIO expander LEDS");
8 v8 a7 E- R/ I9 N Y0 ^ else
* M& B1 q9 a) W& W' R) w printk(KERN_INFO "LED register sucessful!\n");
! o- _3 s7 @0 e. A, d$ P* {
/ D( o1 w3 I9 _% U# b! d return ret;
* F2 k& {& T5 I" D}$ }# B7 D3 Q/ D \7 }' S
9 j$ R8 E6 J: y" astatic void __exit led_platform_exit(void)
" i) E* z4 @! [$ T" a{
) H* J8 n Y; T( ], B, |- h platform_device_unregister(&da850_evm_tl_leds_device);/ h4 v% T3 L: V
- A+ ~! H% d; R
printk(KERN_INFO "LED unregister!\n");
9 J X0 _7 n y" z$ o: n, f2 y9 a}0 C# l7 c: G' b3 J4 G7 N
9 A+ N6 ?* ]! Q1 ~2 i! Mmodule_init(led_platform_init);, c. p" m# j9 d$ w1 j
module_exit(led_platform_exit);
) c4 i, D1 n7 [ \3 w7 Y5 }1 a* P! [5 S4 d/ h! \
MODULE_DESCRIPTION("Led platform driver");; [8 o% I/ A" Q* \+ o! p0 S
MODULE_AUTHOR("Tronlong");; h: `1 E* B2 O. K
MODULE_LICENSE("GPL");# T8 M Y* S, d" ]4 s% T) O
. U8 ^: T( y4 k3 W. T( H
|
|