|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: o, d6 \2 u, w0 i$ H7 V% m
#include <linux/init.h>
( q5 e- W D# N6 H3 U- O/ f) V#include <linux/module.h>
2 m" K/ z6 R; [% n& M$ A0 h#include <linux/kernel.h>- p0 {1 ^ s, p$ }" _( @1 Z9 K
#include <linux/types.h>, C7 ]4 Z- v4 v$ K7 ^
#include <linux/gpio.h>3 X$ U: Q# Q2 z; D6 m
#include <linux/leds.h>
3 k# d! Y3 h8 g3 B#include <linux/platform_device.h>
/ `) |3 i9 C8 h$ V
" Q& q! m# `3 ~0 e/ C8 {4 [* {#include <asm/mach-types.h>
2 P7 u- t& }2 z. i$ q6 i' G! i# X#include <asm/mach/arch.h>
7 P# q, |. J: E- z5 Q; C* v2 T9 P% P#include <mach/da8xx.h>
* H) z4 D; p# o$ ?+ v, [#include <mach/mux.h>5 M2 }' k* n- K- S# z Z+ B
1 A# w% Z m" K* S# v* M! q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( f* H$ H, G5 L8 ^, T7 }' M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 [) l/ J: @/ R. G9 D1 t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' Z: U' P1 w7 T3 c5 K/ N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 S9 J- Q& L. W- m* x; r
% [# s5 _, Y; l2 z( D/* assign the tl som board LED-GPIOs*/
* k& s( X6 n. f1 N% s. `static const short da850_evm_tl_user_led_pins[] = {
+ \4 y2 j0 a' K; Y8 | /* These pins are definition at <mach/mux.h> file */$ C8 l2 a5 H2 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ y2 A7 b3 C: ] ~7 Y8 u" |6 w3 R9 C -1) F# o* M: y7 H# D& _$ i( ?& @+ N
};& j, ?9 S$ b+ f( y3 W
, C* M M$ Q2 Hstatic struct gpio_led da850_evm_tl_leds[] = {, W, }/ A; o$ N# v
{3 T; L F1 H* M& e+ C a4 Q; {
.active_low = 0,
1 L5 p2 E% r6 I7 W: r .gpio = DA850_USER_LED0,
, h8 G; W4 ?/ {; R7 o: k- I- ?" N .name = "user_led0",
t/ b" ~/ L, M q0 x7 q. a .default_trigger = "default-on",, `" ^. [7 ~2 f$ L1 H7 N' w
},7 u6 q: D2 `' K1 a2 }
{8 q8 q; y0 e3 W4 j% J L8 b
.active_low = 0,! s1 d1 l# X; x2 B0 E$ K& X: T% T
.gpio = DA850_USER_LED1,6 {/ n/ F+ I) r7 @2 F; r
.name = "user_led1",
- i+ L2 A5 ]4 e .default_trigger = "default-on",
, q. I3 ~! \6 F3 Y },
, _' t6 K. z" a3 F0 D" c4 m/ e {
' x7 E/ }6 L: S' Y .active_low = 0,+ V; Q/ N0 |! o' r# @2 O. b1 f
.gpio = DA850_USER_LED2,
/ [' S2 K0 g9 B+ M+ I ] .name = "user_led2",
( Y# a- j6 ?# A+ `( Z/ w% S0 C) y .default_trigger = "default-on",
. v n# k- s& L C },9 W8 a6 p: p' V$ H$ \' X7 p! ?- p
{
: }' s7 }! k- j! u H8 r; C .active_low = 0,
: Y2 F& Z* v% I .gpio = DA850_USER_LED3,
/ b `' q% {, Q( [$ ^7 z .name = "user_led3",1 B9 V5 d# U( |0 K! w
.default_trigger = "default-on",
6 o. d! _3 n) A. m! U* N },2 W; x5 I5 {* z
};/ w J' h; Z' P$ V% ~0 F
* w; v( J6 A9 h, l# ^8 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 S% h' \! f" K8 H; Y .leds = da850_evm_tl_leds,
. g- y4 g: f, }- N- o& \! w, \/ q9 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, }, I* B& p/ m+ ^, I};/ v; l' \& G M- j, Y
0 D; a9 B1 Q: U* i
static void led_dev_release(struct device *dev)
! z: P `5 D. h' W8 d& S{
3 o% @/ s, \+ F2 l};. r" E/ Z+ O- ^5 J
# c, R$ u/ b3 x/ u% |static struct platform_device da850_evm_tl_leds_device = {
/ @; z/ a9 a# ?' ^' C0 M .name = "leds-gpio",
- f) e; c5 o- u2 E G .id = 1,
- c% P4 e+ Q, g9 i. b& D .dev = {# k9 z! Q- ^8 W+ b; m! k
.platform_data = &da850_evm_tl_leds_pdata,! r0 w$ _0 ^" _) _7 I6 v9 M. s3 u
.release = led_dev_release,
; a3 g+ |5 W( [ }2 v2 V" I% y8 h3 K4 J8 c: x
};
- h s: \3 r' c9 t \, m4 e% |7 H) f2 b/ L6 J& o0 F
static int __init led_platform_init(void)7 y! A. G a8 s
{1 L. ], x* \/ f' [* m5 ^2 J2 ^: ?
int ret;& y( V. f V7 L1 p& _$ J
#if 0" h+ ?; Q- t! ]$ e: Z1 \( j8 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 R- t, ?# ~& D/ u, C# e: l
if (ret)
* ?+ |1 Y. ]; A' [% } pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* O+ g% i2 E2 { "%d\n", ret);7 @' ?( h1 H8 K+ D
#endif' A, V# C0 U8 G% \+ _# p/ J
ret = platform_device_register(&da850_evm_tl_leds_device);
) ]3 G; c* G0 e. ~ ]+ I+ ` i if (ret)
$ A# C6 q7 A2 F9 [4 } pr_warning("Could not register som GPIO expander LEDS");+ r4 v8 b* P# @: T! f+ q
else. s9 R" d. w+ Z+ W9 H$ h. b
printk(KERN_INFO "LED register sucessful!\n");0 [) q4 \: J' [& k& Q
3 \- k" q1 e+ H! G4 H return ret;
" t5 f; G6 V+ R5 ~7 e5 G}
( M: J$ K ~* l8 Z1 O, V" O2 k# B/ M) c7 d1 ]9 J
static void __exit led_platform_exit(void); C8 i/ W6 Z3 Y' m' [
{
r- h/ K5 v$ ~0 P+ O platform_device_unregister(&da850_evm_tl_leds_device);
% _6 J/ {- q/ G4 S" Q- i
T: e' N) j* D7 N; b8 i printk(KERN_INFO "LED unregister!\n");
: d0 S$ b5 S6 E- u- s3 W}; R( D. y, F T" g
' W+ m9 Y" N4 H; Tmodule_init(led_platform_init);
, i; m, x7 ]) _' ^- Mmodule_exit(led_platform_exit);
* F# k( C( Z1 R" a9 L) b# j3 s% R( V0 Q' j: c3 S8 `3 ?
MODULE_DESCRIPTION("Led platform driver");
8 x$ M5 ^3 k/ y3 u4 Y8 sMODULE_AUTHOR("Tronlong");
x& L2 e) P5 `7 E$ wMODULE_LICENSE("GPL");
/ k3 }9 |) @. F7 K" m. w* V& X
1 a1 x& u- n- P2 y# y+ V& s |
|