|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% U) F$ k6 [) n. j& T; p0 l% E
#include <linux/init.h>4 v1 F: N; A) B' l0 v
#include <linux/module.h>
5 U3 g8 k. t7 A6 H/ t6 U. ]#include <linux/kernel.h>
9 y C' Z& J. P/ x4 m#include <linux/types.h>* Q" \6 N. q B; f4 {% t* X. ]
#include <linux/gpio.h>, {4 Z4 ?4 A4 J! N
#include <linux/leds.h>
1 K8 d0 k9 T" d$ D6 ?: n" \8 e#include <linux/platform_device.h>, Q8 K. P b$ ^- d# g" G
# L! g/ a: U2 r9 R; Y#include <asm/mach-types.h>
' D& S) y; C. T4 A: t* e#include <asm/mach/arch.h>; j3 ^0 }( J0 o" Q( ]4 E
#include <mach/da8xx.h>3 V/ }8 A8 ?$ C, o- H5 |" ]
#include <mach/mux.h>
# P) Q, Z7 d! P! L X y" P8 m9 x" {8 W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' u6 ^: h3 @1 V' Z+ l3 w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ j. g" {' r- f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 q7 c6 l. ~+ B( W I& ~+ C0 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ z$ q! u9 q3 q* R; |1 @
: K1 k5 _, M; ?8 {5 X l0 d- G
/* assign the tl som board LED-GPIOs*/
, _3 p& ]. ?# F! x- L. Cstatic const short da850_evm_tl_user_led_pins[] = {
+ }( t7 i. Y6 c4 h3 I& o( x% q /* These pins are definition at <mach/mux.h> file */9 p) ~. j# U$ @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 e* @* a: Q% h; h
-1* ^% ]! t% X% a8 O% D8 A+ T
};5 H- [$ A8 i; P! e, C) }
4 d& s- ?$ ]7 v4 ustatic struct gpio_led da850_evm_tl_leds[] = {
" m7 f: b) ?0 _& L- w {# c6 `$ \; t+ ]% ~. M% T( A
.active_low = 0,! ^3 B. u9 b1 @6 H1 C$ d
.gpio = DA850_USER_LED0,
! R$ z' W' I+ N: e$ T; \ .name = "user_led0",4 B1 k) j- {# j8 g6 z
.default_trigger = "default-on",
4 ~1 ^! g8 f& A2 R# r/ H },9 X X) S# n; t" ?3 e6 I
{9 T; a2 a6 l% J& T! ]* y$ M
.active_low = 0,
7 x: K9 E7 p% i( y+ ? .gpio = DA850_USER_LED1,
3 y+ F; y; n4 c* ^* h- i .name = "user_led1",
; ]1 ~* c6 i9 r/ K: m .default_trigger = "default-on",+ B g6 {0 o8 c4 Y1 v7 h3 Q' H; v
},4 i9 t' ?' V: w& l$ C
{0 O' H7 P2 B7 [, S' y
.active_low = 0,
# M2 }7 O& ~! F .gpio = DA850_USER_LED2,' I9 C# i2 i0 i% v3 Q* x. n
.name = "user_led2",* m \; M, X7 x0 @
.default_trigger = "default-on",
9 x1 ~& p* c) n3 G5 j: a },: g5 T# K8 F: d" T% T3 O! v2 Z9 m2 Y
{8 X! H" d9 H' `
.active_low = 0,* v( `: {- a; B3 a" v/ x; p
.gpio = DA850_USER_LED3,
* t- G; p0 C& ?0 t .name = "user_led3",
% `" L6 H; v/ F9 q x# x5 O .default_trigger = "default-on",
) `0 Q4 G- ]8 B/ B* A' S' A6 q# p$ g },
2 Q% w' F! |- A" a7 Y" x2 s};3 u) o5 I# c, ?. X: s3 O: R- \
0 V/ U+ a# J* }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ t8 ? i/ g8 h6 T6 b. W" L
.leds = da850_evm_tl_leds,1 i0 B" `! s" a4 i6 g, A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ B- R# A% S! R& F6 p$ X5 L
};
9 V i! _4 f" d: O# A# G" h5 A/ U6 D3 I
static void led_dev_release(struct device *dev)
7 ~) D- C- S$ L3 s{" x3 c0 I5 A. c& Q
};
/ Y# I* L4 G- M. r
2 d3 J" [- V9 w0 p. D2 H' @4 L; ostatic struct platform_device da850_evm_tl_leds_device = {: w3 O0 U9 X. p
.name = "leds-gpio",4 T4 @* p1 c6 Y; o
.id = 1,: A/ q0 t7 ~, o4 L7 x
.dev = {4 z9 j' @; L0 F$ j2 t
.platform_data = &da850_evm_tl_leds_pdata,- I3 F+ W" Z- j( h7 e0 c0 W
.release = led_dev_release,
* o0 N0 _- d$ }- o0 l8 N7 _% l }; S( q: p/ I4 u
};& Y. H) Z9 Q3 l
O& W: o% \6 U' gstatic int __init led_platform_init(void)$ J; ^ O8 w9 L( x5 I0 L6 P
{
/ b% `; w- q; F) ^' Q int ret;
* s" ~2 M C& @6 ?4 s#if 0; o: R0 W* @3 R: T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 \- F8 g: A6 i, F
if (ret)7 L5 j. f0 t8 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) `+ A( x& G0 Z0 O1 O, q "%d\n", ret);
9 G L. i) A; h& k0 {2 _% u, }#endif; G, q3 N7 P. V% v! S4 i
ret = platform_device_register(&da850_evm_tl_leds_device);; j# m3 I4 W" J) Q$ i5 A
if (ret)
. H/ C" ^% V3 w pr_warning("Could not register som GPIO expander LEDS");
) G) e% v% u$ d+ v else
% \" J' v& R$ P3 Y8 } printk(KERN_INFO "LED register sucessful!\n");
# |4 b9 w5 @6 L6 S1 a# G9 B. j5 _( T* ?
return ret;
* p: q. Q6 D0 q: B- j( y}8 l" {% L" |7 ~/ a( ^0 v) h
6 b7 A4 ]# k: P$ E4 G8 S
static void __exit led_platform_exit(void)
& c+ z2 f d. j8 W; I4 Z{
5 a+ e5 g. g& `# a* w% M* G8 i& _ platform_device_unregister(&da850_evm_tl_leds_device);
, E! v2 Z! |; {- L+ K2 l1 ^1 G3 _9 F6 i
printk(KERN_INFO "LED unregister!\n"); `7 O: z0 K' Q) M, ]0 J
}1 Y- R* H# T1 k1 q8 e2 E3 d
* M- W1 \- U3 T; Q
module_init(led_platform_init);+ r) ?- n6 i0 h7 E0 M6 ]& N# {# {) D
module_exit(led_platform_exit);
+ n( L w+ }* k, k2 T- U& f4 ] p# f, @4 \0 M
MODULE_DESCRIPTION("Led platform driver");
+ ^) _0 q7 [8 Z2 a1 m; ]MODULE_AUTHOR("Tronlong");) t. I' J1 K7 Y( ` P. F& x; ]0 E
MODULE_LICENSE("GPL");. |7 ~# Q. @6 z" H/ u) n! B
: v' Q# B$ g) q& a/ s |
|