|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 C* W# V$ l6 v9 z
#include <linux/init.h>5 {/ p$ b1 G+ [& _1 G( C) k- K
#include <linux/module.h>
) }) E" t! n3 B! `9 W#include <linux/kernel.h>! p+ m/ q. T) R" G) f: r' T7 g
#include <linux/types.h>3 I7 L- s$ \, h
#include <linux/gpio.h>5 h& N( Q4 O1 `" U0 O
#include <linux/leds.h>- {# P' z% S- e
#include <linux/platform_device.h>
: o7 c8 W# m) w% }: ?: A, X- z; u
8 m- F8 e7 V3 Y6 b, M#include <asm/mach-types.h>8 Q$ r4 J3 E7 g6 b; V
#include <asm/mach/arch.h>
' Q/ O* f# N: ^ x#include <mach/da8xx.h>4 V0 r! M: h; H* B+ p
#include <mach/mux.h>4 A- ^3 S- y9 p: j; ^
4 j, j+ J" S) }* p u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- a- S# y; r/ C% b) H; [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! R" r; T, A* ?& H8 G2 [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* `- m' H* z5 j3 X' ~4 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ |% i) A, D1 p3 ~/ P
2 L+ N# x) r! k' X/* assign the tl som board LED-GPIOs*/
% D$ t- m$ t9 R! ystatic const short da850_evm_tl_user_led_pins[] = {
. y6 `0 x+ U$ R# R /* These pins are definition at <mach/mux.h> file */
$ o0 Z# H: I. }' S2 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) Z e( ]1 T$ P) r( o! e3 b } -1
, c, {5 Y; ^4 p};% N* s2 ~ [9 [/ T! K7 V1 r
0 q# u6 }5 b5 e" g
static struct gpio_led da850_evm_tl_leds[] = {, k9 O# w# E% D. q$ v" Q
{' L7 f) n: f6 o4 Y; z4 b- P& |
.active_low = 0,
- U7 ^& n; ^6 h6 i3 k .gpio = DA850_USER_LED0,
2 E( n2 Z) n7 y+ E .name = "user_led0",% m) i7 t4 k/ R/ I E2 p
.default_trigger = "default-on",! t0 U0 d6 v& u" @
},
& V/ @7 v' J5 [ {$ R% o% r% [3 t) g. Z
.active_low = 0,
; A8 r- E& K2 F .gpio = DA850_USER_LED1,
- h: Y5 a" x- Z* x .name = "user_led1",, w/ m# V- _' ?, V2 q# M |2 c
.default_trigger = "default-on",
2 h! x8 h4 {# b$ G2 V },
1 g0 D2 @6 x$ \; f0 b {
4 S0 j d2 ~+ h8 D! w4 ^( H0 {& ~ .active_low = 0,) J. ]3 c, e0 x' A3 h! R
.gpio = DA850_USER_LED2,/ I9 g! z9 {1 p, Y2 G
.name = "user_led2",# n/ j+ ^! G8 e, U5 y2 m* k/ K ~
.default_trigger = "default-on",% J7 Z6 [+ N0 `1 Q! E0 v3 p" K
},
0 k, d* `& a, @ {1 i- O, Q2 `7 W q- D& r
.active_low = 0,
* x6 {. ]( N5 m* |7 [ .gpio = DA850_USER_LED3,
9 u' F! ?' K- _1 d7 V* o .name = "user_led3",$ s L9 [: c3 Y8 d/ v
.default_trigger = "default-on",: h3 ]' w7 H+ t5 Y
},7 z, ~- V5 \7 w! y) T! k, J4 C
};$ N* q' w, U _/ |* ^
8 \/ o* E1 p4 G2 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 a8 z3 a$ S3 j) z9 J" ?& f
.leds = da850_evm_tl_leds,
' u& T- g2 P+ D3 c) `8 M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 ] g! Y) _9 v( G' Q% b. }
};
/ v$ q& D& n. ~7 s$ K: W6 ?" H- L" [; L
2 E% w( z$ ^& g7 s( {1 \static void led_dev_release(struct device *dev)0 R: _& a7 S! \3 T7 j; F: z
{
' G3 U8 C! ^% L$ N) R1 U1 Z};
* y/ ^. e; {) B* b: ]( [% x% I2 \# f) k
static struct platform_device da850_evm_tl_leds_device = {5 o! R$ w% g ~* U! }; j! \
.name = "leds-gpio",$ g+ z: b0 T1 q U1 D8 c
.id = 1,* n: }5 U/ H; ~0 o8 Y& M
.dev = {
4 C' a0 N# W4 t .platform_data = &da850_evm_tl_leds_pdata,% h! N- ?7 B! Y- C
.release = led_dev_release,+ z% ?: b5 F7 J4 u* `3 t
}
% ?5 j8 T! l. R0 b' E; H};2 S- @% h) B- ^& P. k9 i$ E
% S; K8 \' `$ _& S6 Y
static int __init led_platform_init(void)0 {/ l w2 u D4 X( ~; w5 R
{
. C" t% M* A& D: T* z+ ?: S+ h int ret;( |+ }# d6 o' ?5 a f
#if 0
) H9 g3 A% k. o: e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- m; }5 O( r% S* ~
if (ret)
! Y. |4 ~+ N" l, o: P* G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 s3 c' {2 U: l9 N1 P "%d\n", ret);
# i }$ N ?+ v f( u% w* G. h#endif& h6 ?+ C# e, d/ ~" r7 |
ret = platform_device_register(&da850_evm_tl_leds_device);7 x' j. b( M5 B+ \! Y/ O
if (ret)
, R- c4 s1 d6 |1 }! X3 L0 i0 M pr_warning("Could not register som GPIO expander LEDS");) o" w& X0 S6 Q6 m& R7 }$ ~6 E0 v
else
$ B3 w4 w( l* e" k9 v printk(KERN_INFO "LED register sucessful!\n");
5 e- m( b* Y3 F2 g/ X% H8 [' l( O9 ?5 N# d4 g
return ret;
3 l6 \& f5 C/ ?% \4 ^" y}
4 L' e! @5 k2 m' d. e& L$ n9 i9 V. E. i) ?/ N
static void __exit led_platform_exit(void)
. n' Y) z' {* f7 z5 [# ]{
9 {' @, C! h' |5 B" X platform_device_unregister(&da850_evm_tl_leds_device);
. z3 W( J3 e* P. x2 ?% [
- i. b: u1 H. Y. U$ J5 M' B printk(KERN_INFO "LED unregister!\n");2 K& B6 c& j* N, P
}
! Q6 u# }2 O) ~3 z+ |! w
5 p5 [/ O: v7 Y6 I6 [1 }module_init(led_platform_init);
8 o, L: C* k1 p q) R- jmodule_exit(led_platform_exit);1 ^) g7 S. A6 S( k1 [& F r- d
. P, _ K. `# ?2 rMODULE_DESCRIPTION("Led platform driver");7 I% I) s8 K" x" B; z- C
MODULE_AUTHOR("Tronlong");0 ~6 f( Q. Y' `4 M8 `
MODULE_LICENSE("GPL");( R8 H4 d2 [$ R
" j' r& P4 m7 H( H |
|