|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- N( o$ \& I; g#include <linux/init.h>
+ K2 w n% b% B, w& k- F#include <linux/module.h>! V" {: D, B f) @
#include <linux/kernel.h>$ J! K* y9 J `# S: y
#include <linux/types.h>
9 F0 ~5 i& T2 K2 b* s. h( z#include <linux/gpio.h>
6 N9 l) |, {3 e1 a- y2 Y#include <linux/leds.h>
6 f b* f" x6 O z4 w d8 F3 S#include <linux/platform_device.h>
7 L E. Q* m C4 W+ c1 H- Y8 q; l! K4 n
#include <asm/mach-types.h>2 I3 Q! F, A4 W& X% g
#include <asm/mach/arch.h>
+ |3 B! Q; l% O0 F5 _7 E#include <mach/da8xx.h>0 y. M" i! ^; }6 c# d
#include <mach/mux.h> y+ n! o0 d1 i& c+ b# q7 X
9 X4 v% k/ u/ K6 h G/ t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 v6 b" _: h2 {% l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) Q( O5 _" R+ C9 `/ v7 ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* R4 q, s+ U/ v6 `! B- A6 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), i2 b6 c3 p1 w, M6 r
: l( D. }3 z3 M9 B' |; T2 E; J& z% v/* assign the tl som board LED-GPIOs*/) f2 L6 l; R5 i3 ~- H, O
static const short da850_evm_tl_user_led_pins[] = {+ j8 U# S. P J9 s9 L
/* These pins are definition at <mach/mux.h> file */3 |5 o$ q2 o0 L2 d6 Y( H( h: B ? n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! [ |1 v& g) W! [
-15 ^/ C4 q9 p8 g2 q" @+ F
};3 G5 P- _1 I% j9 C2 [
$ f T2 O- Q2 Tstatic struct gpio_led da850_evm_tl_leds[] = {
; l) k+ ?2 g4 y* }& y) R {" s0 L! o' `7 c; G+ l, Q6 Q
.active_low = 0,& L0 _% h* z/ T$ h; c3 Y
.gpio = DA850_USER_LED0,6 B& H# n# x4 t2 d
.name = "user_led0",
6 d! v* ~- ^5 z1 M! K: ] b .default_trigger = "default-on",# N8 v. \1 s8 ^# ~
},2 d2 V6 e( \$ B6 @2 A
{( i. D* w. }- n4 E) D
.active_low = 0,
7 ?/ G3 Z+ p0 h( W- d2 [0 x' K% Z .gpio = DA850_USER_LED1,
7 x n, y3 u+ }+ z, f .name = "user_led1",
+ V2 J+ B# o$ f .default_trigger = "default-on",6 m ]. j# S! @" ], M6 n
},6 D% }# e- n9 ~! k; c) ^
{8 Y9 i6 j! }! S4 l/ B% h
.active_low = 0,
; S) I+ H* J/ b. T .gpio = DA850_USER_LED2,0 z" ]9 W1 A! _) @0 A- \! u3 r; |
.name = "user_led2",: b e8 }+ J* f/ O! V' Y) X# U! Z
.default_trigger = "default-on",6 N' H+ A6 s$ @! s* C1 _
},7 w' a. l1 F" d2 F
{# S( |" \2 D+ n
.active_low = 0,7 s7 h" N) o* k$ v. j+ ~" K! j0 |
.gpio = DA850_USER_LED3,
+ e3 F4 L U4 Y: h3 [ .name = "user_led3",
# k: B. g. ]" k+ T* p .default_trigger = "default-on",
% m0 `. [! K) H3 W3 z6 n7 Q },; x* m& E: B: e5 [! A- \' Y& D6 x
};* l6 h" _+ N# s$ f; Q
/ }# T3 \# P8 Y4 H- \6 n1 h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { c! d/ k0 ?' v9 N8 v& V
.leds = da850_evm_tl_leds,% w. ?: d! e" J7 A3 `4 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 Q1 V: g! j2 _ G% K
};
: S8 j3 p M# @' m0 B7 Q# k8 W2 T7 J' ` \5 P5 C- X
static void led_dev_release(struct device *dev)
4 v# L4 s! A. H. l3 _% f' P1 n{
$ a) J7 v1 ^. p: E7 |! ^* S+ |}; H" b" ]; R9 _' ~1 f
. Z x& ~$ r5 x/ M3 w
static struct platform_device da850_evm_tl_leds_device = {- C1 f. b, t& I% C5 C" m
.name = "leds-gpio",* x) i3 }2 M7 A7 P& g6 H
.id = 1,; g* P0 g( O5 y2 u4 l
.dev = {, E6 E- {8 ^$ v3 `) z& w
.platform_data = &da850_evm_tl_leds_pdata,4 L+ V5 o3 R! Z v) o
.release = led_dev_release,
$ U4 p3 R% N" w' B1 Q7 m }
& c3 z6 P+ l- X2 s8 g, h0 O, M1 P! _};9 S, K0 Z& ]$ d; |& c1 r3 w! c3 H
0 q) Z) G- j6 G! ]6 kstatic int __init led_platform_init(void)( T* k5 E7 G$ \8 L5 k
{
& a+ c2 i7 @2 K" l i int ret;
- x+ N N" _ J#if 0+ i9 \6 _6 p" |# D+ I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 d7 R6 s3 [2 R8 j# q& u
if (ret)* h* p) v- L2 v3 u8 }. ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
M$ }: l. c h3 i0 A% I7 m) g. h "%d\n", ret);5 j& h2 M' a- V3 ?! ~ L4 O- j+ e
#endif
2 \! Y b8 _) e; H+ Q ret = platform_device_register(&da850_evm_tl_leds_device);
% j5 }' C P6 y5 M7 ]3 @ if (ret)$ `9 R, E/ R5 s
pr_warning("Could not register som GPIO expander LEDS");
; l8 P! L( j( x else8 o! M& w# e$ q& U7 c( m. y
printk(KERN_INFO "LED register sucessful!\n");+ s! b! p) i0 G9 k9 Q! ^* W- h' [
$ i; m+ h6 a# m+ b, ^! K6 t return ret;1 [" p+ Z* J, V q% _9 b
}& X: _& w i5 _6 E
0 x1 n0 `6 a$ h; e; `8 U: L* ], {6 T4 I9 @
static void __exit led_platform_exit(void)
0 T! p& H$ `/ g1 J* f# k/ l{
9 c& I2 P3 G8 d) g" {) I platform_device_unregister(&da850_evm_tl_leds_device);
4 s6 {5 G! Q% P! ^9 A7 d5 J
; K& P. |& r$ g5 q# d printk(KERN_INFO "LED unregister!\n");4 K& C' S' _9 [6 z7 b
}
4 p9 O3 ~' v$ r3 R0 c3 P; |. i6 ~+ Q& F2 g, j
module_init(led_platform_init);
$ L5 c! c) y0 S imodule_exit(led_platform_exit);5 k& H9 U) h$ m2 F
* }! m/ U4 q, F yMODULE_DESCRIPTION("Led platform driver");
9 `: a6 I x7 _# C- j3 `7 A- u% HMODULE_AUTHOR("Tronlong"); W) q2 p! e+ V6 f0 e4 Q: b0 b7 v
MODULE_LICENSE("GPL");
* e3 L* h: Q& t7 T1 {
% }, d* R( B$ B0 N V |
|