|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ }2 B$ a; m1 G( \7 Y" t#include <linux/init.h>* b6 O( ?) O! | x
#include <linux/module.h>* F# P/ N r' h# x/ t
#include <linux/kernel.h>
0 B4 c+ {. F5 L5 _2 w#include <linux/types.h>
* k9 _" q" h" S. |2 `#include <linux/gpio.h>' o5 H. R) A) N( i9 }5 i
#include <linux/leds.h>
3 y7 @8 N; ?* g#include <linux/platform_device.h>
8 Y o! v. C/ j: p
7 M/ `2 d6 ~/ Y! [. n#include <asm/mach-types.h>6 V' K. m7 I0 e
#include <asm/mach/arch.h>
; P( w9 C) ?+ n' F* C#include <mach/da8xx.h>' F0 T f; V8 [
#include <mach/mux.h>- K6 z D" \0 H* s" H8 K
6 V" u4 _) ?$ v1 E1 f( k/ D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
v E f; A& g9 T& Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 @4 I9 _) [) N/ }; z' L3 r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ k' \; O$ B$ G' S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) o( a4 R" I5 n/ B t
; O$ J6 `: G2 ]/* assign the tl som board LED-GPIOs*/
* _& N$ K5 e) |2 Rstatic const short da850_evm_tl_user_led_pins[] = {
9 O2 l" U7 v+ l9 m/ D5 h& ^ /* These pins are definition at <mach/mux.h> file */2 U6 v# Z6 m n- f6 m3 J0 Z/ Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: U3 ]8 [* I: p) n/ u2 q
-1
" o# a) ?8 }3 e! B$ i8 v9 }* |. ~9 }) m};3 V( Y+ ?4 N1 R" p4 f
9 h1 Y L1 |7 _7 e
static struct gpio_led da850_evm_tl_leds[] = {
, w$ Z+ Y" D3 i+ N* ]( w- L O: @ {
+ L/ x+ Z1 z# i a .active_low = 0,
3 v- ?2 p) N; n6 T3 f$ \ .gpio = DA850_USER_LED0,( s# {! B+ a, U) R
.name = "user_led0",
- X' H. R( r4 h# |3 a' o$ f .default_trigger = "default-on",
C1 f. \. E( `/ j },
! @3 ?6 L D+ D( [! Y! v {1 Z' Z9 S6 `8 S5 a0 `" T3 ^
.active_low = 0,
# j2 x8 @- a: r9 \+ W3 k* B .gpio = DA850_USER_LED1,
3 T) p& X8 d8 \. j .name = "user_led1",
: r: c* i2 K1 A% z. x .default_trigger = "default-on",
2 y/ Y7 `# d0 G' y/ [ F },
7 e; x$ d: p/ ?1 _ v! n( d' G {( J) Q9 s/ R9 X* A; j
.active_low = 0,6 d( _3 V; l' @/ ?- G1 {
.gpio = DA850_USER_LED2,7 j' d' W/ V' k3 K& E
.name = "user_led2",& @, l# z2 V# W3 z1 J: S
.default_trigger = "default-on",! d4 k+ ^1 O N: M- v
},
% X6 c: `% ]* @4 C7 [. }8 z2 A {' L% M) w' @+ h1 N4 D
.active_low = 0,& l9 o4 f# G& ~# |
.gpio = DA850_USER_LED3,: h$ l8 {# a9 F5 q8 M' J- ?
.name = "user_led3",) T8 S7 U+ n4 u& d t! R1 Z4 M
.default_trigger = "default-on",' n+ Z; ~) X3 x. Y' A- v1 x( L+ L3 S
},
S) B4 i4 ~" Q};
! }2 r2 y5 q$ \% z; a/ q7 n3 K* E* N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 j% _* {( u3 z% |! g' M5 }
.leds = da850_evm_tl_leds,9 M$ o6 y$ i* J5 l3 k% d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; P G6 _/ u! m. r% A! `+ N1 `};
& H$ j: |7 i- T0 @
6 }% Z. e* P5 e2 n3 Nstatic void led_dev_release(struct device *dev); s! v- u, J- M$ z) R( u3 i/ K
{
7 X9 h2 G. d/ l6 q& B% q% Z};
" d; y" z4 z. E9 K
2 K6 r* K" d6 I3 e& W: sstatic struct platform_device da850_evm_tl_leds_device = {
# ]. n7 R# y, m7 p' V; M0 e2 O .name = "leds-gpio",0 }3 H) |0 ~! B. O" @/ e6 O
.id = 1,5 E! R- @7 W- W
.dev = {" R3 ?1 H4 u; r! T+ b/ x
.platform_data = &da850_evm_tl_leds_pdata,* t1 R+ ]. t" v% Y! A. P) G
.release = led_dev_release,
9 e' w3 c& |1 |& A }
! S1 A- z; C# t( T0 p};; O7 v3 b9 A2 x; V" l; ~( a K
3 ^; W: T# }& C5 lstatic int __init led_platform_init(void)
) W4 ~9 O* e1 O( h; @) r v) k7 H{
2 g1 E l/ g9 ~7 I4 U4 w- q int ret;- ^) k# b4 h4 M7 t: P7 n
#if 0
* s: ^1 k- s% d( |& p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 x8 L% G ^2 J5 C if (ret)
) u8 W* C! ^4 N; t' g: c! m! u) g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! r) k6 L( I9 L a. @+ `/ G "%d\n", ret);! o! b( ~# ^7 f) S v
#endif
& I5 X- z# z$ w, r ret = platform_device_register(&da850_evm_tl_leds_device);; ~/ k. b% c+ x. W7 c4 h) Z# i% H
if (ret)( Q7 @/ a6 h) ?* T
pr_warning("Could not register som GPIO expander LEDS");
, A+ {! C E) ]' V! U/ i else, B4 T4 S7 e0 T- m( p' u
printk(KERN_INFO "LED register sucessful!\n");
% j M9 Y: c# r6 x
3 W; W5 U! B9 o/ q7 ^, x* D return ret;
2 L) P$ ?2 C/ i' ?1 \}
* t: x5 |: H" n6 w7 Y+ T* m6 P; Q7 w, ~" F
: _7 }4 |) A4 S. A9 g6 q2 K# |static void __exit led_platform_exit(void)$ l$ X* E9 R: C+ T6 O
{/ K0 I2 J( f6 `$ x. o9 y
platform_device_unregister(&da850_evm_tl_leds_device);
3 a$ A* b7 d# m& O8 ^& m [
* S! c! @6 m& e$ g' O printk(KERN_INFO "LED unregister!\n");
' k( v, C, n- x% A- w$ [}4 m9 j$ q9 `) X+ a" M
3 k: v% ]4 _! C& Z Jmodule_init(led_platform_init);
2 M& o/ L6 W8 [module_exit(led_platform_exit);
/ s Z. L/ M2 U5 d! q
- e9 H/ q' [7 x/ T _5 F7 wMODULE_DESCRIPTION("Led platform driver");: }8 [' o4 g6 \8 S' u
MODULE_AUTHOR("Tronlong");
, U, R' N; W5 C I9 n- qMODULE_LICENSE("GPL");4 R8 P8 u" l! A# z; d
' V$ P6 M, d& j9 P
|
|