|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! o& j0 Y- S# L5 u4 f6 y) d#include <linux/init.h>3 s: |/ ?! Z- V( `) Z+ P0 |! w. p
#include <linux/module.h>
0 h+ Y, G# t* C3 g$ J- [; S#include <linux/kernel.h>& Q* i5 R7 D- p' ?; u4 ^; [( o8 k
#include <linux/types.h>, D6 E: p3 Z5 x
#include <linux/gpio.h>
2 }' J) y/ t) J( S* _ j- }' D#include <linux/leds.h>/ x# ]5 y3 G! O
#include <linux/platform_device.h>
) n: A4 \* W/ ~% k4 w) M9 q/ D. k/ {8 c: f
#include <asm/mach-types.h>
9 o8 Q* Z4 l0 F6 \#include <asm/mach/arch.h>+ K8 G+ m# W6 F j# W
#include <mach/da8xx.h>
1 [4 t- I) ]0 Y5 Y, o5 E3 V/ \+ j! ?( N#include <mach/mux.h>: P4 K& Q) @ p& ~
1 B* R7 h- k! v/ i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* S0 J% L2 r, Q. ]% W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" b5 Y. }, ?5 @9 A2 H/ K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 Z3 {& ]6 T; I2 i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). Z! I) s5 I5 w& o
' ?' _! S; B3 v/* assign the tl som board LED-GPIOs*/
+ e3 B" q" l- Rstatic const short da850_evm_tl_user_led_pins[] = {
. H7 j n" _; _# m9 | /* These pins are definition at <mach/mux.h> file */7 I/ \# w) x, `+ T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* k H8 l" ^5 G7 b( V -1
' k5 k! @9 z* P/ `7 {0 L};+ F/ n0 J; u. B) p
5 ~: I: ^: o1 \6 r/ ]+ zstatic struct gpio_led da850_evm_tl_leds[] = {
3 e/ f2 v5 \" Y* C {
) e. X; B4 l9 L, {: W .active_low = 0,1 @- X/ Y6 m$ S! \
.gpio = DA850_USER_LED0,
) p$ F+ w% \4 k$ X* s& o& e .name = "user_led0",
9 O" i) k1 }4 t7 J y0 V$ ] .default_trigger = "default-on",
- ?; v o' B/ G },
! v+ x- T+ i K3 I% u {
& l: Z! |/ E1 I* I; u1 U .active_low = 0,. L' A. j9 V* h1 U* O
.gpio = DA850_USER_LED1,
$ o5 |8 m3 I! m1 `, H8 s* v# _6 s) A .name = "user_led1",
: _& S5 b3 ]- J .default_trigger = "default-on",
% I3 d4 G0 H! d. F# @3 e },
4 o8 {. ^) @5 i& m {
; g% A5 S" v+ O7 N9 z* V. c .active_low = 0,
5 w& N# a- a$ h( E: V9 o. R .gpio = DA850_USER_LED2,& i ~5 C. `8 E( r4 C
.name = "user_led2",& x9 e. Z9 S* L/ A; @" B
.default_trigger = "default-on",
- x) ^' F1 H; p( k! ~ },
7 Q' r, s S9 v: M: \ {% }7 S: U/ Q: c% W( K: ~- B, p6 O
.active_low = 0,
/ k! N8 j! r3 X& h0 ?, U& B6 N .gpio = DA850_USER_LED3,
5 z/ e, @; I _. \& m% I1 D .name = "user_led3",& L; i4 K2 Q$ t5 |0 Z9 F9 r
.default_trigger = "default-on",
( d2 h. v' }# x) W0 r# a+ Z },
; i7 P2 M/ Z) L; Y8 Z};
6 l0 t8 O! r! N: @9 _* ] M' Q: k1 ]) N* W$ y0 ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ O" Z) X, f" t6 L3 m2 k .leds = da850_evm_tl_leds,
( E- F0 k, O, l9 x5 @# u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: Z' G- N" z c
};6 W1 r. A6 U0 K1 |: P( `5 G
# ]( Z! L! b7 L4 Cstatic void led_dev_release(struct device *dev)
) t: Z/ ^5 a* F5 ~9 e' g& I0 c{ \# W6 n. P9 C
};
, k) g8 b: Y$ C- k: F2 J5 T: A- p7 ?9 l7 U$ v
static struct platform_device da850_evm_tl_leds_device = {
( @& K/ i+ v) ?& z7 \1 a8 i .name = "leds-gpio",( v% m' {$ { `0 n
.id = 1,
0 F4 G; S- N' Q4 g5 i6 R2 ~2 v3 E .dev = {. {; |7 g( O3 B% }- F/ d* v" p
.platform_data = &da850_evm_tl_leds_pdata,
7 r: K0 G4 t. N1 t* e& ~$ X .release = led_dev_release,
9 i# W9 W) I2 b Z r2 p4 l8 t }
! G1 F! |+ z+ L6 w5 N};/ B9 t' h/ { w4 O
% q+ ^* A1 ~2 Cstatic int __init led_platform_init(void)
: r0 G) Z2 m- {* y `7 i7 T* m. A{
6 Z! l: p2 W4 ^$ w# [' C9 U7 q int ret;
/ A" e! @) y/ X0 P' l5 ?$ _7 @2 a. @#if 0
, ]2 t! |8 y2 C- F; E; q0 m2 V8 H+ S& Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 m J1 n5 g: d. }9 \ if (ret)
5 r/ ]5 {! M# \, D3 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 U! V; J3 g& d W
"%d\n", ret);2 T8 x! j( i* {2 H: r/ D
#endif7 \6 K4 g! X& w2 C. f
ret = platform_device_register(&da850_evm_tl_leds_device);
s# v6 |0 W7 h4 n if (ret)& d. e! g1 }. l2 P- e* \9 g$ {
pr_warning("Could not register som GPIO expander LEDS");
. a0 d( Q/ e+ r& q- R else
! u' |% Y* [6 K6 v) H printk(KERN_INFO "LED register sucessful!\n");2 S, v* T, C) Y# J( a
2 V9 o' H+ m3 d% D" @& H0 Q
return ret;4 T* c0 P2 y4 _/ t9 h8 P" Z
}
O" T8 g& d( @- R- ?7 W4 b; I- n) x
static void __exit led_platform_exit(void) B& r1 ]5 @: f3 f4 D3 G9 q
{2 m$ ]( S. C# ?& S% Y2 W
platform_device_unregister(&da850_evm_tl_leds_device);
0 I$ H: V7 @) O& T: B( P ^- [0 O- A- I- N
printk(KERN_INFO "LED unregister!\n");' W. e4 u& [* d: d
}
% j8 s/ }6 s5 q7 t' N/ N4 J( _- @
" Q5 u( K. I4 c8 Y$ Wmodule_init(led_platform_init);
; j8 o' @* d6 _/ }; Tmodule_exit(led_platform_exit);, n* y) x: J1 C3 I% I
d$ D1 ~8 _% B9 m' w) |MODULE_DESCRIPTION("Led platform driver");7 ?; C6 p6 D/ X5 t
MODULE_AUTHOR("Tronlong");0 r" V; h. N: d
MODULE_LICENSE("GPL");+ Z5 D) C/ h( ~; n
+ N" U" B y2 ]. { |
|