|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& E0 F- B$ U- A$ g
#include <linux/init.h>
3 h$ ~! I4 {0 e, N7 S& d2 x+ s, y#include <linux/module.h>; h# { @/ l8 O
#include <linux/kernel.h>& O8 q5 V) l" w
#include <linux/types.h>
( y& r& c5 E! i; `& \1 O- M6 v#include <linux/gpio.h>, Y4 V! `/ F1 [- }! V
#include <linux/leds.h>! G2 i. p2 x$ G0 Z7 A
#include <linux/platform_device.h>' L' T0 d Y8 W
/ |1 ]% D. n) x
#include <asm/mach-types.h>
8 R, l ?4 C3 _! L$ j#include <asm/mach/arch.h>& T4 L9 n+ R4 y# U% M: T" R5 f" S
#include <mach/da8xx.h> j% Y" V8 T" u/ j
#include <mach/mux.h>1 W6 H2 F8 O; I# H5 {' ~# m
; P; h; X7 L5 L; ~6 i- f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 n- C" I' A- t, m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 L3 r6 A/ m9 ~' s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: f' X" c( E+ w) W2 Y- l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 q1 L' l+ s* V* R
& d: E" o# T- m* f1 C' I( m
/* assign the tl som board LED-GPIOs*/
* T' l1 A+ C( Qstatic const short da850_evm_tl_user_led_pins[] = {3 U9 H& N" r0 o4 C
/* These pins are definition at <mach/mux.h> file */( o: a; P0 Q8 g2 `) W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% Q4 _- i Q; D3 V" z' I
-1
# k6 | i S7 F' X& l};
' \# x0 P6 X' Z. s' O$ D( W, |. c8 N
' ^% z9 u7 m% P8 V9 T8 f. d" Astatic struct gpio_led da850_evm_tl_leds[] = {
! l! W' k! `# z {
* k0 B9 z' Y- H/ c5 h( c l; K .active_low = 0,8 t |$ j$ ]& P7 L& k7 v& D+ D R
.gpio = DA850_USER_LED0,& Z% h0 ^& g6 M1 x8 v# ~! m
.name = "user_led0",
2 a$ B3 t7 f" W& n4 y* T .default_trigger = "default-on",. G. J, U* C! M9 u; T; G0 i& \
},
- O/ d! i& U% [ {$ ~' h, x. h, l9 o Z
.active_low = 0,
6 ?' J& n- d6 A# r5 j .gpio = DA850_USER_LED1,6 J0 \+ x, W B! X0 F" z# v
.name = "user_led1",' O* G( O7 Y! k1 m( e
.default_trigger = "default-on",! i) l* i; U. ~* l3 r
},
0 Z- v' \! P) s- P6 b' J6 V {1 R5 ?9 V! N- ?. S
.active_low = 0,) V7 M2 l0 N) G" r
.gpio = DA850_USER_LED2,
/ Q5 b4 u4 x8 E6 E3 Q .name = "user_led2",7 W5 _& b# h9 o9 s& V
.default_trigger = "default-on",8 l m# K2 C7 F% ^6 b# n; c) d
},
9 i4 h, D/ p, g6 i" i" b2 ?& t {( o( K6 s; F- r8 O# F; G
.active_low = 0,
2 x1 O9 b3 k4 E% e9 v' B# y .gpio = DA850_USER_LED3,
. B$ \0 ~5 F& y' U$ t# r' g& ] .name = "user_led3",
$ i& P/ \! @" q; q .default_trigger = "default-on",
! _, h; _5 Y9 ?& n9 y$ p3 g },( \$ {( P; v- p& y8 w
};
$ ~# j# \! V H9 R2 x8 d) a
$ B. B/ h1 ~% I) T- u6 V- m, g7 Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" F8 L1 h$ h$ W1 n9 Z
.leds = da850_evm_tl_leds,
' Q* o( i: R- m8 ^* n+ W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, N# r% p; w6 a8 i& ~% }& T};3 a& T' a0 l0 Q& n$ Y
1 Y) X3 L+ T' }static void led_dev_release(struct device *dev)1 _! h: O* F' G+ y: K9 p
{
- O5 A4 I9 U& U5 A. @4 b};
% m$ S, P8 c, d* ?
, [. ~$ E: o) G9 bstatic struct platform_device da850_evm_tl_leds_device = {
# p& Z9 T' C0 x1 n% P+ q8 ` .name = "leds-gpio",
7 b! w; A* H7 G8 R" f .id = 1,! Z5 E' X$ F: q
.dev = {4 L0 y4 M( x1 L! i+ p b
.platform_data = &da850_evm_tl_leds_pdata,
! R5 V( b: n. v8 I; M9 L .release = led_dev_release,2 B* l8 I p+ |- N$ ^/ A; x
}
, O) E* `! s( T- d9 c, ]};- C# P/ g6 Q. h r, j2 R
2 b j- W$ I9 p2 |static int __init led_platform_init(void)
, R% ^7 P) p4 Q/ h{
" o5 |9 S6 ~! {& l% r$ x int ret;( B3 X7 t* q; _0 p
#if 0
- z. P4 J) _( `; ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 L2 J2 L# S& g0 `% k7 L
if (ret)- `& I; k& t+ a- i( C4 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, X# M, K" j7 {% Y" s7 g "%d\n", ret);0 E9 q3 C: a/ u/ g
#endif# i5 A: _9 e6 t0 S9 g7 s
ret = platform_device_register(&da850_evm_tl_leds_device);
$ z+ ?* C* f! v8 i. L7 O* C# u* J9 y if (ret)
) I. @4 I! I2 ^, O% v, t pr_warning("Could not register som GPIO expander LEDS");; E0 L1 v: _4 g: u
else
2 ?$ I; A) x% V printk(KERN_INFO "LED register sucessful!\n");
' q/ `2 Y' i/ c u, ?: D5 B: n4 _5 d5 [9 w( @" w6 q
return ret;
1 q k- U( O( X" O( I# y} c$ Q# I1 s8 K8 P
& u/ R) f3 u# `( u; f) @static void __exit led_platform_exit(void)
$ b9 M0 u; _8 A{/ s i* M1 C8 x6 K
platform_device_unregister(&da850_evm_tl_leds_device);: t/ t, b. \& x; }5 X% T
9 {7 T' ]2 H @3 _- r x8 n printk(KERN_INFO "LED unregister!\n");
1 E$ u& w+ V0 \2 N: _}6 | T. m6 N' c8 l5 D$ q
" X7 X: k- \0 k
module_init(led_platform_init);* b. N- y) x. B: h) u( q9 H# b& }7 Q
module_exit(led_platform_exit);0 W( ]( I2 C$ k+ B# `
) C! P( I9 j) r* }( d, wMODULE_DESCRIPTION("Led platform driver");8 B0 F& M; S) q4 ^& u% J7 [0 P1 b
MODULE_AUTHOR("Tronlong");
. ?2 D6 w( c4 c" ^MODULE_LICENSE("GPL");3 u9 j V' f1 A% I( l9 u7 a. m
$ ]% t% E* `: L" I! a- j
|
|