|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
{" J/ \5 j, S#include <linux/init.h>) ~ z4 v" {- C! q
#include <linux/module.h>
7 U) J9 K$ S7 ~7 [#include <linux/kernel.h>6 T, D2 y& k$ n7 ?* D
#include <linux/types.h>$ s) W7 m( Q% j5 Q- r8 @
#include <linux/gpio.h>$ p% F9 D2 H0 u# T- e5 U' C! S
#include <linux/leds.h>
. ?3 s4 @5 ?5 u* w2 X8 H3 ?#include <linux/platform_device.h>
6 ~. ]4 b- `3 F) x2 C3 @/ A4 L( D
#include <asm/mach-types.h>
7 w) }. [( s; y: ^+ q0 L6 [#include <asm/mach/arch.h>
7 i' Z( v3 h1 q( H2 c) ?#include <mach/da8xx.h>7 @$ _7 }; N1 L: y. ]. F) v
#include <mach/mux.h>! S; m2 Q F0 K/ |$ f
3 [0 t, p" _& B# ]" V! P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) w3 u9 J; U7 B) ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); ^) D2 S& H6 u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- Y9 }) \5 s) J' Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 l) h' a2 T* S
3 p1 Y; A: M" @. ~) H" B
/* assign the tl som board LED-GPIOs*/
, _4 t( r K4 D s6 [+ R/ v8 M; Jstatic const short da850_evm_tl_user_led_pins[] = {% d+ \- q4 Y" ]% J) H. W8 T
/* These pins are definition at <mach/mux.h> file */
, O8 y5 o8 h3 P# M. }9 z% [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 C8 l& o3 r; O: B$ H
-1
0 e7 A h# z8 C* Y- P};; S" h' A/ {9 Y5 m+ H s: W" s2 L5 ~2 u
+ `/ k4 H3 F- A5 D' sstatic struct gpio_led da850_evm_tl_leds[] = {) ^1 [ c B7 f$ X( o
{; G% E4 e& `. k1 ~/ @; _; a3 G
.active_low = 0,2 J) m O3 d7 u( }
.gpio = DA850_USER_LED0,
7 T+ n3 i0 e* m; m/ _( ? .name = "user_led0",
7 Q& f. n* S$ R! q- p! p- G! Q .default_trigger = "default-on",7 W& \. z6 |+ S! o
},
7 t( M4 K* ~& V+ j/ S {
$ |! {1 q: k4 l# t$ }; B* j .active_low = 0,/ k. q8 @" p- b d% E1 ?& ]9 m) M
.gpio = DA850_USER_LED1,/ K5 ~1 {2 V: `+ u
.name = "user_led1",
" P6 E: S5 D* F) r, b' q% m .default_trigger = "default-on",
6 _2 K3 I4 e W( A1 J },8 z0 r' P. B: ~% u
{
* q7 b7 N& e3 h/ q' ?9 L. I1 @" N9 l" M .active_low = 0,
5 q3 b% G! \" ^; D: _( ?" k .gpio = DA850_USER_LED2,9 \) r: f" n' t- k k) g
.name = "user_led2",
2 y2 Q) Z7 ~# h9 G .default_trigger = "default-on",
7 A# U0 _) K0 L& D+ u },
9 t7 S. c% U# O- q/ b: C" R {
8 o% ]1 u6 W2 n2 c8 c .active_low = 0,
% b) \9 H- |' n. i8 K; K .gpio = DA850_USER_LED3,
- a# n F" t4 L6 M7 ~. q. @. g .name = "user_led3",
! K2 w; v1 b7 w; t( b( v" I/ j2 ? .default_trigger = "default-on",
# o5 x. n- g% ^: U) c5 Y- M' g. c },
4 @& ^1 o4 l; g* V# q _" B};
0 H8 a7 @6 @8 ~/ C( q# q3 h
Y% ^9 D* Z- y9 J2 L2 i" c* a6 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 L- _1 R3 X$ f .leds = da850_evm_tl_leds,0 N$ n3 M" w& D) S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% A1 E! Q# o; A: f! n$ l};# |/ u5 k2 y4 j a
3 Y+ A9 g) Z9 Y0 v. o- i; I) q% Bstatic void led_dev_release(struct device *dev)
& T. ]7 p: r/ Y5 ^: L% a( D1 m{
~' [( g4 d: [: a};
8 p. R* ~- y3 v* t I9 `; a" u" e3 H7 E) a$ f
static struct platform_device da850_evm_tl_leds_device = {
. x' ]: d! x% ^4 Y+ V2 H/ r& ~ .name = "leds-gpio",
- S% [6 S9 T4 y0 L* m m2 U .id = 1,
" B/ b7 q b5 X3 G3 g- T& m .dev = {
- }9 W+ {3 E2 o! q1 J4 _0 G* b .platform_data = &da850_evm_tl_leds_pdata,
& a: D' v) S1 U# J2 e' O9 f: ^ .release = led_dev_release,- R# I' {: r" \& D+ x- l2 Q: V; _4 o
}% f- c/ b' \$ \
};
: f$ X$ S" J+ w3 G# b
7 M1 c- {; ]8 P5 ^2 Y9 dstatic int __init led_platform_init(void)* q. o; b. P+ x; N4 a8 ]
{
9 E4 l( B9 s' s, ?( _ i# k int ret;$ N# S/ [8 e4 ]
#if 0
. U s! H( r" F% \5 G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# |; _5 k6 H* ]# H* L if (ret)# O: S& { V9 p2 \# d) [: H) F3 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ w6 s7 M$ Y8 x
"%d\n", ret);0 ?% {6 R! Q, a0 n" s$ r: w! l
#endif- ?2 f, Y1 M& w
ret = platform_device_register(&da850_evm_tl_leds_device);" D+ I' A( q! d
if (ret)
' I& a# ]* s$ G$ ]" P pr_warning("Could not register som GPIO expander LEDS");% }- e' W- o: W8 T" ~% ~
else
) R& |6 T6 l& Z' x* _ printk(KERN_INFO "LED register sucessful!\n");
; M; O, k N) O7 E, Y: _1 e, Y1 n, }+ F; B v7 i
return ret;; l% X. d8 ~$ ~4 k* J7 n
}
4 j) N( `& N' R" E0 J; |- e( B4 A$ x* n' C
static void __exit led_platform_exit(void)
- R# N2 ~2 I6 z" A* U) j9 h{4 b& |; K3 F+ r- c- X. v+ @1 d
platform_device_unregister(&da850_evm_tl_leds_device);3 R' W& d2 F2 ?% r e' e5 d5 L( R& |
7 v2 t7 M( v" u; U printk(KERN_INFO "LED unregister!\n");( N2 t. r5 x# X0 G2 h" [! ~$ e
}8 {* f( ~- u! Z8 j- j7 y
( h8 P* ~$ s; F( b
module_init(led_platform_init);. s* Z2 b0 M) Y0 L; q
module_exit(led_platform_exit);: X8 @! B# I) Y' F. b
$ w0 D' P0 k! x7 W% H9 m5 n0 [% J2 t
MODULE_DESCRIPTION("Led platform driver");
9 P( t `$ @7 r) I; ], X$ j- RMODULE_AUTHOR("Tronlong");; ~) _' z% E6 }; |
MODULE_LICENSE("GPL");. n1 z3 ~; e+ z/ b
/ t- U$ I( K6 u) G3 G6 R6 k
|
|