|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 \) F5 e9 @+ c5 h#include <linux/init.h>
$ b- b! M/ e* L. I#include <linux/module.h>
& [" n$ Z8 O _& p4 o# x/ T3 h#include <linux/kernel.h>- @0 \: h) z f
#include <linux/types.h>
$ H7 n/ C: k: _/ b, m& A#include <linux/gpio.h>/ ?7 g! {# u( Y3 z# A/ i w" f( |* |
#include <linux/leds.h>
5 e- q" Y5 d- c, z7 E. g#include <linux/platform_device.h>
( U3 d* k$ j+ O: q, N7 n2 [
4 m k$ \( h% O#include <asm/mach-types.h>
! p4 G6 z' Q$ K' n( i9 X' V#include <asm/mach/arch.h>
. U! M9 v: F4 ]* P#include <mach/da8xx.h>
4 }3 G: e, H. @1 l#include <mach/mux.h>, ?1 T' \9 T7 d4 y
% a) y+ D4 F8 q. Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 y# e4 L: f1 w. h# `# x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" F4 M# J: T A; w& L$ x1 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 ]$ D# I. r2 Q1 P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
O. N' S+ u4 F+ H) x7 X/ @
7 X7 d/ p0 i+ l, v0 |& ^/* assign the tl som board LED-GPIOs*/
9 x6 J( u* x# mstatic const short da850_evm_tl_user_led_pins[] = {
) H# {/ u" M! W" I1 c /* These pins are definition at <mach/mux.h> file */
. B# K) i2 k. }3 P: B3 I# Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- p G7 W+ Y; s8 D -10 W1 g. U/ ^! `7 r4 `2 n0 A
};1 j h# Z% @9 b7 y4 B) @
7 V6 U! {. f6 S4 mstatic struct gpio_led da850_evm_tl_leds[] = {1 U4 c! q7 H- j: A t2 E7 ?
{
) t. ~ O# _, U3 u .active_low = 0,
/ G8 z7 _3 G* N, j, W .gpio = DA850_USER_LED0," E/ @( O3 C v/ `* v
.name = "user_led0",
0 e, C! y& d9 I( M .default_trigger = "default-on",
6 {3 _5 z$ B& y. X$ L },4 {7 y+ p# ~2 d! K: V
{% _% B7 ], L0 `0 {/ a- [% H
.active_low = 0,
1 b' [: N! f4 P .gpio = DA850_USER_LED1,
4 E* x8 k5 t# Q3 m1 i .name = "user_led1",
. D! @! S2 i3 [' q/ O0 E .default_trigger = "default-on",) u1 `% [* q u6 [( k& t6 T
},
+ H& ]. l8 z4 \( F {: G8 r3 V4 ~7 E* c o! v7 L
.active_low = 0,
: ?- Z. E0 |2 N: f .gpio = DA850_USER_LED2,
# i( k7 q3 Q1 j3 _/ M& m .name = "user_led2",: J3 D! Z6 A% x$ O
.default_trigger = "default-on",
& e! s) L/ m' |) K9 V },2 `% I& ?7 }- U+ [: h* i- a& g9 d
{
) g+ p$ ~8 s5 K" F5 R9 C/ i .active_low = 0,
6 A! Y" @$ a$ A% }0 D; ~ .gpio = DA850_USER_LED3,# j5 m. s0 t( ]1 C
.name = "user_led3",
) i* m* j4 E: G# m" h .default_trigger = "default-on",' F1 p# T V" X
},
* k: }3 I5 l+ F};$ ?: r% F- ~* J
" z/ X. \ _# E# k- E/ ~# D8 ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ b0 m) @, j5 U( _+ }0 U$ ?: _1 ~4 ^ .leds = da850_evm_tl_leds,
9 U* `, Z" n; g2 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% y" g: j& u1 G- Y8 B+ }7 w% v
};0 m8 Y+ J5 ^6 j$ y; g0 f3 G
! C3 \+ `. j3 Y1 {& Mstatic void led_dev_release(struct device *dev)
. M2 ]# v: |5 h, A* V{$ G4 e) V& [5 c: C
};
/ q% v; r$ `" g3 D; L( X8 Q) E: |3 r: v$ `4 e5 I9 Y& L& |
static struct platform_device da850_evm_tl_leds_device = {8 E. {: l0 H. N- @4 q
.name = "leds-gpio",- X0 R% R+ S- V/ e, b& }* z4 W
.id = 1,: E; j ? u" a' H6 e
.dev = {
& V g. M5 g1 n# i4 D* V .platform_data = &da850_evm_tl_leds_pdata,8 r5 M3 ~; Y) D2 o, a
.release = led_dev_release,' A* U! O5 s7 a8 L6 c" h& E6 g/ a
}
% F* y7 _" |5 O}; `: O8 k: K. l" @' |
! i$ E3 }5 R, P1 G" J8 `5 ~0 y5 p( {3 d
static int __init led_platform_init(void) V+ ^- I% k- i. t* i# Z4 }# g5 v
{) v2 w( @9 P$ q* T; n9 k9 K
int ret;
* g7 M5 l* o# F6 T- S( L$ l2 i% p#if 0: ?9 Z% q9 b4 A; O8 B; l4 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! J# s6 T1 C& T! a/ g
if (ret)
; d3 c/ @/ n2 V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 \ s1 K; S( L' P2 x4 B "%d\n", ret);
4 b: T7 u/ J h( j. C! x) Y#endif
; I' p- i6 u* {' E p0 V9 { ret = platform_device_register(&da850_evm_tl_leds_device);
/ @* F9 `' v4 b if (ret)
! |! U: }) A$ o5 u2 e( H2 X pr_warning("Could not register som GPIO expander LEDS");
% l8 U- {0 p0 v/ ?/ g, W else
5 r2 x$ k1 p: S4 ]) p! O6 j printk(KERN_INFO "LED register sucessful!\n");# G3 z0 L5 _" T: W, K
9 r' ?) L! \) V' k( Z
return ret;
! E% i m2 k3 L- Q) Q& d}! k9 k* |8 @. y/ r* ?' A1 T$ k9 S# s
; n# X2 _+ n _8 d2 ^static void __exit led_platform_exit(void)4 M! m" w# R% U. z
{
4 N9 k3 B. g- E, T4 @6 a6 S1 g platform_device_unregister(&da850_evm_tl_leds_device);' H% C. x" P) l
/ `/ N5 t' \2 t- J. |7 D7 g) S
printk(KERN_INFO "LED unregister!\n");" Q+ r; ]* E! ~5 Z& j: ^9 Q9 R$ `
}
2 E/ ^, |. {' @) b9 P$ ~
0 ?5 \8 a/ y+ k2 l3 k2 u; ~4 Amodule_init(led_platform_init);7 v( W6 U# i% l9 q* V6 b! X
module_exit(led_platform_exit);% b3 E0 f4 m, y d2 t, _! E: j- j$ g
. F9 [ Q) ~: [- Z3 @9 R" q
MODULE_DESCRIPTION("Led platform driver");
; o3 W% V1 ]) G; lMODULE_AUTHOR("Tronlong");
2 D& X! O# e2 }2 G5 n4 ^MODULE_LICENSE("GPL");# S9 ^" d' h/ M$ K- n- f6 z
' e: O: z9 F: R$ |* T |
|