|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ X f; P. G, m#include <linux/init.h>
5 n- \/ g( c/ i) \1 e+ b#include <linux/module.h>- H7 Q! F7 J5 R ^' @! S5 j
#include <linux/kernel.h>+ L7 `; ~+ L$ I
#include <linux/types.h>
3 n( u8 N7 Y; N7 ?9 H; @( G9 ]#include <linux/gpio.h>
9 y( W( _$ O1 ~, h#include <linux/leds.h>
' ~8 r5 g0 ?9 j @6 F#include <linux/platform_device.h>
Y8 Q' _6 m7 d8 J5 r, f* `! C" D1 P7 b3 u+ U: g/ h
#include <asm/mach-types.h>" o9 k* b0 _! M( r0 `2 K
#include <asm/mach/arch.h>
1 R& Z, G: \0 z( B8 `* u#include <mach/da8xx.h>
- g6 E" o( [( h% a#include <mach/mux.h>
; j U! S+ [8 j$ f; ^1 X! P
! w& V. ?& U' X! c( ~& c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" p; I5 H7 A/ |, P( _/ p) H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 T" [( x5 G3 f9 P$ B% \& W+ Y9 y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 q4 h: l, \& p! B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 P6 _3 |- Q% R8 K! x
( k/ {4 H. p/ F: Y; M- W( c. e; M/* assign the tl som board LED-GPIOs*/: j1 d& S9 A: h# Q. \# A/ X! b( Z. Y5 U
static const short da850_evm_tl_user_led_pins[] = {: z6 s: w. p+ V9 _ k% P) O
/* These pins are definition at <mach/mux.h> file */
; k. T& q7 P( Y/ z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( g- J( O; I }) A! [3 m4 t6 F8 ?$ D -16 f& g- d! r$ F7 |% e! `
};5 J0 R9 U- s; W: c @; M
! b3 g5 `9 A5 l# M# x1 s5 ?& r* k
static struct gpio_led da850_evm_tl_leds[] = {
! K$ C! g+ l' I/ Q; }9 o& \2 h {% O. P1 G3 y! F3 g7 I
.active_low = 0,
% ^$ H& T" R6 b# z9 \ .gpio = DA850_USER_LED0,
2 m/ @( l2 ~: a# C: u .name = "user_led0",
7 V0 V! V, B1 A4 e W .default_trigger = "default-on",$ _6 x4 f4 ?7 a4 s$ ^
},. T( ]: N0 [ H" m: d9 h
{
7 A$ q. O9 L9 _8 a3 |- s) M: G; o8 m .active_low = 0,, |$ U+ v8 L6 Q9 q. A
.gpio = DA850_USER_LED1,% r1 `8 l2 J" w9 b
.name = "user_led1",
5 }7 o4 _! x) _7 K .default_trigger = "default-on",
6 q3 w: b/ e! h3 [7 { },; W2 h5 O, ]/ P+ l- z0 p, a
{
' e7 x& D4 W y$ W; I; a8 p# h I" F5 z .active_low = 0,
, C9 C9 Y3 M E; ~, C .gpio = DA850_USER_LED2,! M- H* f, T9 p& N0 n$ ?: s
.name = "user_led2",
; O$ m$ l0 I. t" Q1 r1 C .default_trigger = "default-on",$ x. S$ l. Z5 u$ i+ t# r- }8 [
},8 u6 |7 @& x& Y! u5 O' @8 g S" L
{
C* o1 C5 e b1 L3 {. W3 x .active_low = 0,
7 m$ p, k- ]+ \0 x5 P .gpio = DA850_USER_LED3,
9 ?( A6 p9 L V" j2 W6 P .name = "user_led3",( p7 Q2 _- f% q1 |5 U0 K
.default_trigger = "default-on",9 {: x/ y6 ^. z. }- Q. S
},. T8 i) z3 D4 }0 B4 M
};
3 t5 P- V4 N0 U8 A6 ]4 r* F% T
! Y' j( Y3 O& |, d8 r4 j+ pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 J& r& a; i$ x3 {9 H0 B .leds = da850_evm_tl_leds,8 H$ b6 w' C' P$ r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 {. X" a6 Z+ S( t4 w! {& H# j
};
0 o; ~ {7 w0 j, V7 t
% u5 u$ S# f1 @$ w8 f* \static void led_dev_release(struct device *dev) S2 @0 @/ r4 c3 Q2 P ]
{
2 Z8 i( z; X% Y5 s: R};: B2 |- M3 Q) g4 J5 l) k; v
) p# w5 C0 R8 `. istatic struct platform_device da850_evm_tl_leds_device = {1 _8 K$ S; T- X4 Z: Y1 l
.name = "leds-gpio",% l* X9 p* G$ Q2 w
.id = 1,
, T, T& j: G, x o .dev = {$ K7 l) r( A. j& B u$ I: N* N: O8 p
.platform_data = &da850_evm_tl_leds_pdata,+ Q, B$ h7 \! Y: g- P! g
.release = led_dev_release,& O6 \* U9 ]4 V" p1 y
}9 k4 | z0 y W8 h, L
};
2 k$ d* i) f. v, \5 C3 ~6 G* }' o/ ]% b3 F8 G
static int __init led_platform_init(void), B( H5 x0 j; u
{$ W* F' E6 @$ C5 ]9 X( v' x
int ret;
' O, Q" M. E6 X2 ?) x' N#if 0
, O; C) ]5 G5 l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# m F* Q: P4 B; V, d9 _3 m if (ret)
6 f E& A, n0 l* K2 w1 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 h h9 p3 j; ?/ q( P4 m "%d\n", ret);- M% S9 A2 S& {4 ?) l6 Y! b( T
#endif+ W$ G O9 c, x' h
ret = platform_device_register(&da850_evm_tl_leds_device);) n" p8 x) W3 Q& G
if (ret)0 G2 X7 h0 c& H' G
pr_warning("Could not register som GPIO expander LEDS");
$ K, ]* P. r( ~) K& G else. k5 b& D* D! d& y, [7 x
printk(KERN_INFO "LED register sucessful!\n");
( A6 V# H7 O) j0 M8 o& N3 w& ~5 R+ Q6 n6 k
return ret;- w. I8 \$ Q! a9 S/ B
}5 [4 b0 l, g) g0 i( z/ P
% }4 I! i$ s" g( P, ?static void __exit led_platform_exit(void)
; b/ Z9 X) h# p) K{; R, b% p: y7 q# ~4 o% {
platform_device_unregister(&da850_evm_tl_leds_device);
* f' _ V, @2 Q
3 k9 o4 A: g( s, Z# U W. @/ H! p7 F printk(KERN_INFO "LED unregister!\n");
6 a% b& R$ o5 N6 K7 r}' \" Q2 _/ p: x
, I) h& F2 b# k' p: o7 F$ S1 Dmodule_init(led_platform_init);" c* j) C/ ~5 O; V G" ?
module_exit(led_platform_exit);% U0 \0 `, S* X% o' @8 ], ? y' d
& T2 Z3 ~! E1 [( ]( u. A, C. O
MODULE_DESCRIPTION("Led platform driver");
/ m, J1 A2 s# G `9 N8 i; vMODULE_AUTHOR("Tronlong");' N+ k8 l; Y* c$ W
MODULE_LICENSE("GPL");4 r0 C4 O/ L: m+ x8 G
- Q2 ~6 T7 x. U. U# C |
|