|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 O. e& q3 ^. k$ z#include <linux/init.h>4 n/ G0 N+ m% O5 F! M7 ~( K1 d4 g
#include <linux/module.h>
3 a) a0 M6 W; p7 e- m9 o- t#include <linux/kernel.h>
+ D+ H" F' w/ i2 |1 I#include <linux/types.h>/ b: W0 D# u4 w( R! y7 E0 o
#include <linux/gpio.h>
. d, w$ q% { j% k* _7 H#include <linux/leds.h>
# E9 I. |: o/ V- j#include <linux/platform_device.h>3 F$ i* x: b8 b' F" r! b8 ^+ d }
7 F& m3 n$ K" L: J$ U3 y7 a#include <asm/mach-types.h>2 L6 _. ?6 Q/ C6 C2 {$ F
#include <asm/mach/arch.h>
7 G& O4 Q1 o: R) x6 E& A4 v. F. b& Q#include <mach/da8xx.h>
0 O" b) ]! t! l D% ]1 j. b @. F0 \#include <mach/mux.h>, [* u/ C+ A, U9 g- G
: |! ^; j8 ^5 z' e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 }2 j5 Z0 W- K. c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ a, W5 X( H+ e; ?3 R: @3 d+ ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 \7 [2 U$ B( e2 @0 m: ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; P$ N; _( @& ~. S
' P1 T) A5 L+ H$ M/* assign the tl som board LED-GPIOs*/
, j' |/ @* H8 s* e7 U. Lstatic const short da850_evm_tl_user_led_pins[] = {
- F6 X0 v# f: U5 [ /* These pins are definition at <mach/mux.h> file */# y# B. W( [! \ d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# ?7 Q+ m* \& w# s1 B3 d5 |
-1
% ?1 P# @+ C E5 e; w};5 \2 i; R; {9 `7 ~) m
, D, ^4 P+ ]6 l. y
static struct gpio_led da850_evm_tl_leds[] = {5 W% T1 @, I1 b1 _
{
: l$ D* q8 z, Q' z+ v .active_low = 0,
9 {% B' H2 n% {( J( l. G .gpio = DA850_USER_LED0,
/ W8 ]7 k) |% U6 X .name = "user_led0",+ x$ f; N, X8 \$ G
.default_trigger = "default-on",0 Q5 G- ^+ K& o( x8 g
},& A3 J2 k- I" n$ J) x8 y* ^# R
{2 ?* n- h' s, w5 K& T7 p
.active_low = 0,
0 _6 J6 u8 f6 d" ^$ A' K0 A .gpio = DA850_USER_LED1,
8 t- h- k, N3 ]. A' t .name = "user_led1",
3 ~+ U0 E5 t- a; P# g .default_trigger = "default-on",# r. r Q% T* l
},
! _; D1 ^/ N+ ]6 C {
; D% S1 U, x D8 D .active_low = 0,
1 y" p9 V1 B' x) z+ ]8 T! \ .gpio = DA850_USER_LED2,: W2 c* R9 d4 z7 c7 e, \
.name = "user_led2",+ l% P0 g5 K. k! w4 S1 A, s' p
.default_trigger = "default-on",4 w+ d5 p- d) C* ~5 z3 r0 B6 h# \
},
* r1 P a( O/ Z- \0 [( I {
& r0 u! c- o# L* W .active_low = 0,1 Q3 G7 h; v" V& n6 i; H
.gpio = DA850_USER_LED3,
5 K& d3 W+ T- O6 u .name = "user_led3",
% h0 Z" D4 l t! M9 J( [5 U .default_trigger = "default-on",, g7 R6 Q! H8 r
},
# I. F: B& d" K: Q};0 {9 L2 S4 \; S4 w
: A$ X1 @* ]4 V* T( t) O! x9 }' @ lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ s# L% \' j' u9 i1 x .leds = da850_evm_tl_leds,
) f1 F9 v. F" u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, M1 P7 ]+ p. o* A" ^9 I1 M
};
( h, q% y- E% B, k+ O3 J: C1 j! s
! }) t8 K: w( I$ j/ [: L3 ostatic void led_dev_release(struct device *dev)! k9 G* X r" j8 o0 z% J
{
1 z! M M2 P$ g U6 }% G};8 O( V" L* a3 s* L9 l$ U% ]" V" H
/ C3 @3 u# `6 ^- ^static struct platform_device da850_evm_tl_leds_device = {
9 K. x+ _; Y) a5 B& Y8 i% m' ^ .name = "leds-gpio",9 L6 h. q# a: Z7 x" l/ V1 W
.id = 1,
- d4 i* ?& p0 F; O( o3 ^ .dev = {
- P; y! N6 ]5 ^, O+ P" T( k .platform_data = &da850_evm_tl_leds_pdata,: _ q' q( K( x8 P8 l( { n
.release = led_dev_release,
8 M2 }, Z8 r" q% h }
g" k7 M8 C. U {6 Z2 n};6 f/ ?7 O6 S; W5 y9 b' R5 x$ _
1 i8 V7 n$ a* u3 c1 k8 ~static int __init led_platform_init(void)8 j( v, d/ L" o1 u: S m5 z. s5 w
{# S& a3 A% ^( r/ H9 k0 [
int ret;
/ A* w {% f: h4 c0 r! K#if 0
/ V6 |/ T T3 p( } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 j3 n, I% i' X! N8 H3 b* @ if (ret)
$ a. M* w* a( f: L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 K$ a/ x0 `; ^/ {( D8 g
"%d\n", ret);
4 L6 s [) f7 K0 k6 b; X0 V c#endif
- X) ~- r& {, H, M ret = platform_device_register(&da850_evm_tl_leds_device);; I2 A1 u: t: a0 {+ `& d4 k
if (ret)
" l* o) Y& q" u: a+ ]5 X pr_warning("Could not register som GPIO expander LEDS");$ T+ t5 j) M" u4 ]4 k/ n! ^& Q
else- v: ~ r) B* m C1 T5 I
printk(KERN_INFO "LED register sucessful!\n");5 u; W) ^+ c6 k/ f3 A- T$ x
7 i' X7 A) z2 l: W- j
return ret;
! k! |( u7 O, Y6 U}
) _/ A4 Z, ?( A9 U
/ ?9 S5 p2 W; t( e3 vstatic void __exit led_platform_exit(void)
# O k% n" [6 ~! x5 f{
: R" b$ I+ h$ I- I platform_device_unregister(&da850_evm_tl_leds_device);: F- E6 V( L7 I1 H) @
0 S: y& m, G% y$ f. k
printk(KERN_INFO "LED unregister!\n");
4 O0 P( L; ~1 B$ S! n2 H, S& L}
5 t1 A2 B! M* ~8 z* p* U& U+ E8 o9 ?+ E/ n/ j9 o+ @6 j
module_init(led_platform_init);
1 _6 q& e& L' M/ bmodule_exit(led_platform_exit);% I- M3 K; I8 X
3 X# J3 A& A6 G$ bMODULE_DESCRIPTION("Led platform driver");
, G1 z2 l W7 }5 ]! k; GMODULE_AUTHOR("Tronlong");+ f$ x) `' J: d
MODULE_LICENSE("GPL"); Y* b j9 R, Y2 U# J; d
- a8 W7 ~: J$ f% o
|
|