|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# {% u' Y( W" R/ A% \1 z3 I) X. R#include <linux/init.h>
- d8 f3 t% n, o; O8 Q8 x, g#include <linux/module.h>
. J) O5 W/ |* i" x# J& U#include <linux/kernel.h>
2 }5 X, l+ T) ]8 K#include <linux/types.h>& r: V0 M8 n1 a3 ~9 R
#include <linux/gpio.h>1 n' _0 Q+ @6 k/ ~# y% q
#include <linux/leds.h>5 }- `* Q. I/ j; }" u% x p
#include <linux/platform_device.h>
' ^$ {9 P4 c0 J+ o3 ^ d
/ Z& x% [# [% S8 j3 v0 O+ V- D1 N1 n#include <asm/mach-types.h>
# z3 i# {% X( U: G#include <asm/mach/arch.h>
% d# x3 S! X9 b4 B C8 G1 h+ s0 l#include <mach/da8xx.h>
/ `/ ` M& i2 ^, u* L' {4 {#include <mach/mux.h>
9 j, S4 P0 @3 u. G2 F
% Y+ o- Y% a, Z% I6 r$ M! d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ G1 F+ b3 b& e/ p) @0 {' I/ ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 l% ]* G ~5 e/ e: u. x3 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) Z& n O& E3 X7 q- l- O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 g/ u( c2 ~6 o0 f" x1 @
: c* o2 u0 _7 p6 A5 S( W/ i/* assign the tl som board LED-GPIOs*/( x# h, @; t' } n$ d2 [/ F, q
static const short da850_evm_tl_user_led_pins[] = {
9 q$ b Y, t" s1 h0 N. b /* These pins are definition at <mach/mux.h> file */% E3 }+ e4 `( k% d) K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& H/ z. f) I, P5 G" N8 {% q; Z -13 m5 \1 A e: X) r/ {
};
! }9 n- m3 O4 D3 \, v8 ]4 @& d, \4 X' Q* j- B
static struct gpio_led da850_evm_tl_leds[] = {
# F* c, z$ Z% o4 H' K {) u/ ]1 f2 m0 r+ z% g$ b
.active_low = 0,
8 o7 E7 E/ j# H! f; D6 M! |( |( H .gpio = DA850_USER_LED0,
1 @$ G1 g3 _$ S+ Q0 a4 k .name = "user_led0",+ l. M8 s0 R f3 }$ L% S5 W
.default_trigger = "default-on",- A- ?$ D: Y) U2 A) r3 h; D
},/ U6 a2 f: T" ~4 u
{# w4 K7 Z! G- ~2 e3 n# R3 \1 W' B
.active_low = 0,1 R( n! P% M. d' a, P9 n
.gpio = DA850_USER_LED1,5 H5 @' H5 D" _! y( c7 [
.name = "user_led1",: w6 m# i/ c3 |, o
.default_trigger = "default-on",
: u8 K2 {# U% c- f/ q, L },+ B% o- x8 M7 r
{! `7 @5 k# [3 c4 d+ C
.active_low = 0,2 V! h. V" M: j( Q1 q; ]
.gpio = DA850_USER_LED2,/ @' r; @; e( R8 Z; @! }* I
.name = "user_led2",4 |+ w5 J: Z$ D4 G0 X
.default_trigger = "default-on",
" H! e! I1 y3 T% D7 e },
+ m, I5 ]" u1 L3 f0 d- X {8 P* i( d+ a+ v7 b3 F$ `# S
.active_low = 0,8 B7 r2 U, i7 J; b$ ~- w3 y
.gpio = DA850_USER_LED3,' J, h. @2 w0 D5 s. |! c; H8 m
.name = "user_led3",
: b8 E8 {- k+ S4 M& c3 l5 L) _ .default_trigger = "default-on",) T; k$ B/ ]3 g) M
},+ f6 U5 l& S) G/ O0 I
};- h' K5 |1 x8 R6 l
. ^% B/ D& d T# h/ f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ m$ B. w9 y, A# i' l4 P4 J1 e
.leds = da850_evm_tl_leds,
/ F+ B8 n1 G' s9 V* E; Y# y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 B \! Q, y: R, m C: M
};6 o3 \* I4 i3 E
' C# W" g [2 t' [static void led_dev_release(struct device *dev)1 z% U3 \3 K7 C" D; r( Z( y
{
. Y$ b/ i1 d% Y- z};
+ o- f! ?2 W& e* U& \
# j8 b$ }& A9 X% ostatic struct platform_device da850_evm_tl_leds_device = {4 O1 v, `" r# h' z$ A L+ U
.name = "leds-gpio",
& Y2 `4 Q* X4 i) y .id = 1,- o+ U( Y9 O+ ~& E; a
.dev = {: c1 l/ b/ ^# T- G8 M' {2 d6 V
.platform_data = &da850_evm_tl_leds_pdata,
5 q1 p1 ~* o8 b: L; w" a .release = led_dev_release,) W, J' k1 W1 H R% P3 g# l1 U
}
( B5 a' g \- X};
7 P/ C% W& A, \. n$ l$ J* j
! q0 V7 d% R ^+ M. \2 E+ u5 t7 bstatic int __init led_platform_init(void)
/ {, j- c$ P5 e' @& F{- \) C4 T# H8 C/ }7 K
int ret;
3 i! K$ _5 W H* f6 J#if 0
0 r4 }! F! A6 Y" ~0 E1 Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 A D0 J) _" p, E0 o) u" U! R if (ret)
+ [ K h" P0 k# x+ i& L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ \" U* j5 L7 A, f+ M
"%d\n", ret);
9 @4 U4 B' y, P1 u- @. P& R& @#endif
' @, O, j& e. B+ |; a ret = platform_device_register(&da850_evm_tl_leds_device);
: v) f, @( h; ]+ K2 u if (ret)
3 p- }, a$ v3 X: X" g" D pr_warning("Could not register som GPIO expander LEDS");: o5 h/ F2 H; ?0 g m
else
! a: y0 ~/ F7 {1 Q1 F4 a0 O printk(KERN_INFO "LED register sucessful!\n");
; Q5 A( g9 Z- @; ]
s4 i- m0 c% \( Z' Y6 V return ret;& Y1 K* e& z0 S7 C7 A) X
}/ h: y" v+ v, {8 f$ W! i1 g
' O0 h* Z% d* V5 M4 istatic void __exit led_platform_exit(void) }# T* d% ?" O
{
" \0 \7 C1 }/ u& f6 q) U' ^! [ platform_device_unregister(&da850_evm_tl_leds_device);
$ U+ z, _' m* A. \; X8 Q0 p$ P: F4 D
printk(KERN_INFO "LED unregister!\n");
% }5 v- u$ X2 T( [/ S}. {2 N( d- A+ M( h
3 {) P+ q9 R/ N. l6 X
module_init(led_platform_init);# L& g0 |# l7 e) D
module_exit(led_platform_exit);
1 v6 G+ Y1 \$ c1 M4 O( Z2 d6 |" [; q1 d% s
MODULE_DESCRIPTION("Led platform driver");
/ @8 [/ R5 h1 C4 b, PMODULE_AUTHOR("Tronlong");" P3 X! p! Z% Q
MODULE_LICENSE("GPL");
+ k8 x3 w) I Z7 j3 v& R
) O Y; b% _' C3 R1 `8 k |
|