|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 o" y, C" |" Q& B, P' U; |#include <linux/init.h>% n$ e2 i4 ~- |$ S8 a$ F' D4 [
#include <linux/module.h>8 k) [4 i6 d' }- W! l
#include <linux/kernel.h>
4 @7 j/ F5 ]4 k" u+ k#include <linux/types.h>
% |0 w2 n+ }! b- C' p& J4 c#include <linux/gpio.h>$ B; |1 X; t# ^6 u' r; U
#include <linux/leds.h>
7 b6 h; N# j m; t, x( }! M#include <linux/platform_device.h>
+ S& A3 T' v7 V; p: M. l' T- B1 ~" f, q- ?
#include <asm/mach-types.h>( w/ |0 n% M; P
#include <asm/mach/arch.h>
1 D5 D! s4 ^; x6 t5 X#include <mach/da8xx.h>% @; V1 w" Y& e
#include <mach/mux.h>
. O! J5 n, i$ L/ v' D, O7 |% X6 @$ m3 ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 w$ i; T& d- v% F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 B& u. S5 t3 O1 l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' I1 \: l7 I/ I- j! `" E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 m- C& n% u5 T4 q4 ~0 g6 Y! V+ K
: [+ F+ S% O9 l/* assign the tl som board LED-GPIOs*/. N- T: Q& }& ?" S- j
static const short da850_evm_tl_user_led_pins[] = {
2 Y! T& {# U2 E' N- t /* These pins are definition at <mach/mux.h> file */1 p% a4 m5 e$ ?2 { L. ]5 U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 q4 c, |. |& ^; ~ `6 J3 I! r3 `
-1" A0 k# W4 z: x5 r6 D& Q
};; J3 f/ @9 m: y2 q( p2 I- k2 T
. ^! ]/ [) W# i$ p& F
static struct gpio_led da850_evm_tl_leds[] = {
' F! X; M' ^- b0 d0 f* B m1 G {
- g; F4 ?6 p4 O( P8 @ .active_low = 0,' j9 h. P3 N: l3 _1 h3 b6 U
.gpio = DA850_USER_LED0," N0 ^/ P: V3 _' x, s
.name = "user_led0",' s4 k2 n6 d% K# J5 b" \) l
.default_trigger = "default-on",
6 V3 e4 `$ e) _/ z4 G# _ },
5 _5 R& B2 i+ H9 h( U) M {+ ^ ?: ], Y2 ^2 C6 R
.active_low = 0,* O, t% ?/ G# R) w6 T. x O4 D1 _
.gpio = DA850_USER_LED1,# F; {" q$ \! W7 l1 V4 q' c
.name = "user_led1",; R6 e( C M1 }
.default_trigger = "default-on",- _2 r: G, l" {4 h) {+ F. l
},
4 s' n* p& \3 o2 C: Y+ m) V {# Y9 i4 N0 r/ i
.active_low = 0, w% Q8 ]+ X, ?" f
.gpio = DA850_USER_LED2,7 e( h: ^' b: T! S
.name = "user_led2",
8 a' U9 T$ n8 f: {3 M .default_trigger = "default-on",
) t h! P0 K0 v1 ]. |. T2 T },
1 d* z! r' w0 n) Q; b3 \ {
1 r& R/ f0 X6 n3 F$ @( C- e" r .active_low = 0,# o7 ~" B& g2 M! B% [
.gpio = DA850_USER_LED3,- T. V& x$ r4 |; R+ w, @
.name = "user_led3",/ m" g/ Y6 A1 q+ u# ]
.default_trigger = "default-on",
" z; V5 {& K" J! D },
' ] u: P3 W7 Z( V};+ V5 X( j! n1 T3 e! t
/ F$ P" s; |3 m, `! [( ?2 Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 ?1 T2 e u7 _
.leds = da850_evm_tl_leds,
* f: I2 O5 ^+ b1 s* l f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. N' \ K, O3 z0 ` z2 A
};8 t f" f/ n! V
# _2 D8 `! G! l" V, k
static void led_dev_release(struct device *dev)# n3 ?5 v' T+ y- W
{
4 K/ P6 I' a) ^* v D9 D% C8 l};
0 K. I5 k i' y0 u. |0 T) r# M# t5 y9 J/ G0 f) f, S! N" e2 p: g7 ^3 Q
static struct platform_device da850_evm_tl_leds_device = {
! a7 S2 J3 t1 ?5 P, Y3 P .name = "leds-gpio",
8 b, ^: T/ C6 {( X, g% q .id = 1,
% o0 f. p% F* K$ M .dev = {
6 t. Z: K$ W* ~ .platform_data = &da850_evm_tl_leds_pdata,
3 I! b3 q& ]& ]9 k .release = led_dev_release,
7 }2 X$ F \0 ?8 C9 f8 M9 o; g6 U }. n# t3 F9 }! F _
};6 B8 B7 j2 G) u1 q6 G9 `
- O2 G7 T: O1 N1 R y! C; Pstatic int __init led_platform_init(void)
: A1 g$ }0 f/ U" x4 H{: e6 i$ }( E+ r; \
int ret;, d( f* o2 F+ ]9 F4 h& ]3 G
#if 0" v! Y9 |& y4 j6 E7 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 M0 i: T5 V# @7 Z$ y+ |& E if (ret)
) K' r+ F, y; f& ^0 ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 \: v7 |, g0 m* F+ F3 r8 {$ ? "%d\n", ret);- i1 V1 A6 j2 m
#endif; n/ t0 F) v4 k7 n" Q5 P" n- R
ret = platform_device_register(&da850_evm_tl_leds_device);
9 I# E' [3 _. x; H- M3 [% N6 ~6 m if (ret)# `: z- L6 B( P; o, U* G7 m2 V
pr_warning("Could not register som GPIO expander LEDS");5 |+ L: L( b# H$ d' n* v5 [
else
) j* E& B' L: h7 V5 A q printk(KERN_INFO "LED register sucessful!\n");8 E6 G( J. X- s/ l
) {8 M5 u1 A% r
return ret;* b2 X1 `# W/ B3 c, P. B+ z2 j4 f0 ]
}
4 R% u j6 z, Q* }% T: N/ ~# E
3 F. Q8 e0 g* @static void __exit led_platform_exit(void)+ v4 Y0 w+ |5 K9 B6 U. l3 l
{
/ {% m6 j- Y! w. { platform_device_unregister(&da850_evm_tl_leds_device);
) A, c( c# T! f q; l: c0 [6 A
# @1 ]% v6 u$ y% A1 F printk(KERN_INFO "LED unregister!\n");
/ ?0 t* z6 C) }9 D3 f# J}
! E, Y- I( g+ `3 y2 \4 B4 L
9 G) s' N7 F( q$ M9 Mmodule_init(led_platform_init);
) d+ z: X: q9 J# @! M0 Imodule_exit(led_platform_exit);
+ k$ y/ ^6 \6 J& f1 `* C6 \/ c4 q9 p- a
MODULE_DESCRIPTION("Led platform driver");$ v6 _" s% a4 A# H0 M
MODULE_AUTHOR("Tronlong");5 O5 L- T+ k; I- H
MODULE_LICENSE("GPL");9 G% f% l" V1 c2 T
! m; m: o' R* E' Q |
|