|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ d: z5 Q' q3 z; m$ D
#include <linux/init.h>3 W& V/ E9 F% N$ s' H" a
#include <linux/module.h>
. f1 H2 ^- D; C4 S+ E% v#include <linux/kernel.h>
9 s3 |' l4 }$ M; t# k. k" z#include <linux/types.h>
) q$ q# M& X& n& n#include <linux/gpio.h>5 Q: h5 a7 C7 Z2 g9 i) _
#include <linux/leds.h>
% }6 e4 k6 o, E9 A0 N#include <linux/platform_device.h>( h7 J& F) e. Z% J0 D+ b' W5 y
3 a" R- [# |) y7 L* b! V1 ^& B6 V#include <asm/mach-types.h>
) O" m, v( W, F5 G; ^, K5 k#include <asm/mach/arch.h>2 E/ {8 H, z. @3 Y8 j% X; g. c( K) l
#include <mach/da8xx.h>
5 ?% \7 Q9 Y- K* y) ~3 W' H# G4 M#include <mach/mux.h>& d) b* m6 q/ Z H! {1 j7 d( m' [6 s
; g( S" a- M0 B( K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 N7 I' f) Z2 ^3 M6 S+ J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* d3 C c( p. ^2 m) v: |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! L; p1 G- `& }& h- Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ J4 K% ]/ U4 O' y* S, B" @; u, a
) {: _3 k9 i& \- H/* assign the tl som board LED-GPIOs*/
$ X* n7 b7 @7 `- N1 Fstatic const short da850_evm_tl_user_led_pins[] = {
: ~) o9 c, C7 b1 t5 x: d! k /* These pins are definition at <mach/mux.h> file */8 Y, d6 a% F5 A$ o& A- t/ R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ w- b [2 f' t- T' }; T, l' { -17 i$ V b9 Y5 g( G" ?; g. k
};% i1 q: t- n& \5 ?) @, n
/ Q6 Y: \. O6 n
static struct gpio_led da850_evm_tl_leds[] = {. `8 b1 g( Y) _' F
{+ w5 ^. W6 R- z" H# X( J
.active_low = 0,. m% G2 V# |& |7 O
.gpio = DA850_USER_LED0,) k" l) ]1 _: `' k' N# d( j
.name = "user_led0",
j7 P: x3 c! E9 W8 F .default_trigger = "default-on",, y/ D: s* Y. m% m$ V8 L* s0 ?
},9 D% D# j9 W; s4 H2 c2 H m
{
. U( T1 R2 i0 e5 ]1 }1 X .active_low = 0,* H! s0 S) x) E G- }+ c1 U
.gpio = DA850_USER_LED1,2 {1 [" J/ i, f3 N, f
.name = "user_led1",
. Q- k4 U0 N. X$ I& m& I .default_trigger = "default-on",- ?; @% Q: g4 x! f9 p! f
},
~- I Y% u6 p5 Z0 S& T/ m {
$ O6 `3 ^; x. R3 {7 y1 \) c: w .active_low = 0,% u) ?0 R7 \/ O, t# ~, I* @5 s- G
.gpio = DA850_USER_LED2,6 V4 u1 h4 g* k
.name = "user_led2",) `7 a T9 k; v, \' Y0 G
.default_trigger = "default-on",
* c' s0 w5 ?% Q, \4 C# V4 K },- A6 \1 i3 R" v
{
1 M) b+ s1 @' F1 S) ? .active_low = 0,
7 d6 F# L4 ^- Z2 t0 W' E& L. h .gpio = DA850_USER_LED3,/ d. N/ K: j5 [- t6 C
.name = "user_led3",
}: I/ D+ j7 q( [. [ .default_trigger = "default-on",9 f9 e/ B) r% o9 c4 }
},& L4 x' W6 Q" b, O
};
: G' e) l9 t) C3 t8 p/ g8 d# ^- `! d# }4 T% x, C8 c6 X* W3 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 y+ b4 Q) K$ ^: ]. o
.leds = da850_evm_tl_leds,
1 \! J9 I( ?+ ?! i4 D* Y2 T .num_leds = ARRAY_SIZE(da850_evm_tl_leds), t3 Q5 k) F! X
};6 A. t) J m. m/ c1 @8 D0 @
3 Y* T6 {; v, p
static void led_dev_release(struct device *dev)* E/ |4 n/ V& h* M6 c
{5 E+ Z9 T1 o( \% i+ u5 S1 I! V
}; X4 M- ~2 z# Q/ q1 I# |5 b! c
+ I, Y) X' @; l0 U4 astatic struct platform_device da850_evm_tl_leds_device = {' ?5 B$ A1 O B a
.name = "leds-gpio",/ K) b2 u6 @; f0 d# O
.id = 1,
4 W5 F$ o6 m. x5 m9 D+ M7 s .dev = {
3 A5 H" `% s$ Z# ` .platform_data = &da850_evm_tl_leds_pdata,
G. C5 X1 N R5 N; u .release = led_dev_release,
+ Y" X2 f* \* {' U% C8 P+ Q5 m }
5 [4 x$ q+ o3 c: P" \$ C& H8 b6 b3 \};4 y) I* K& g3 s& H
1 u n' b" O& @) b7 i/ W4 w Tstatic int __init led_platform_init(void): e' m% R( e; F- G% K' a; g
{/ E ?1 Q' H. q- R3 z# M. r6 T& {/ d; Q7 C
int ret;' w. g& v1 X, Q( m% p
#if 0$ n. d$ }/ u. c0 l& ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: Z# s7 w: k1 r7 \* w# Y. E
if (ret)
e! r+ V; Z/ u F. x; ?$ o) V pr_warning("da850_evm_tl_leds_init : User LED mux failed :": d; B& }9 q1 ?8 J% _7 V* }" D: g m
"%d\n", ret);3 T" C/ ^3 t' x' I
#endif
; c" j, e0 I7 @( o r# a; O ret = platform_device_register(&da850_evm_tl_leds_device);1 z' h& D5 Y e) Y
if (ret)
, G( X$ w- L! F, w pr_warning("Could not register som GPIO expander LEDS");; E2 n+ h9 R" T9 [, A' |# p1 @$ U3 b
else, t% C+ C# g$ d9 z9 \
printk(KERN_INFO "LED register sucessful!\n");
$ q, n+ K( z# B" p. m5 U) C- f% U' V/ o) M9 r
return ret; b; F1 s$ ~; X1 @
}
! x8 D2 V! M2 I# o, l; v9 B1 I2 N: U8 H; ~. }& L
static void __exit led_platform_exit(void)
5 G/ j' ~3 j; M: |6 [{- H% l" z$ |1 S8 x
platform_device_unregister(&da850_evm_tl_leds_device);
' r! c. U6 m; J" d# d6 Z+ B2 A) E# }/ b& v0 L
printk(KERN_INFO "LED unregister!\n");, w; K/ @0 ], n
}
; F+ r* t" W0 r2 ?( x% C( h6 T
: x6 k8 t, D& L( amodule_init(led_platform_init);' l, Z7 S$ K; {: y5 P: w# ?* @4 \1 F
module_exit(led_platform_exit);( X# L2 ?5 e. H' q
( f, s' w. k; H0 G+ |
MODULE_DESCRIPTION("Led platform driver");; o7 w% e8 s- h: Q6 |9 r9 s
MODULE_AUTHOR("Tronlong");
( k) a2 a+ G' k QMODULE_LICENSE("GPL");
; P8 B" }, g2 R7 l+ S- [% E. i4 M+ r/ `* M
|
|