|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 E! s( k2 P6 v- T O$ \% T0 i" t
#include <linux/init.h>
: m+ Q7 b5 `& Z& l- t; Y5 j5 T#include <linux/module.h>
+ t1 r/ e7 M( W+ ^; L4 R+ C#include <linux/kernel.h>8 u; P7 `- ?+ w H
#include <linux/types.h>
& ~- ~( C1 B, ^+ Y' Z#include <linux/gpio.h>6 A) Q' v, ?- X9 ?$ w* z
#include <linux/leds.h>8 h3 [- w6 V& a9 X
#include <linux/platform_device.h>
( D- J. k$ M! [. o# A) X
" J# N4 J$ J( l) X5 {) L4 m#include <asm/mach-types.h>
0 L9 J0 z& \" v#include <asm/mach/arch.h>
0 D( I* d& o i0 w7 B! R#include <mach/da8xx.h>
0 q4 l1 V. N' [8 f. \$ m#include <mach/mux.h>
8 B4 p- E! n+ l: Q+ z8 ?/ i' V7 H. o! U" {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
z& K, U4 J5 O# E: M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 o! v4 E# l& b. P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); B& N! L4 l6 Z- f4 ]* ?: l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, a1 C9 F5 ]' w6 w7 n$ V; x7 N# x/ I& R* W2 n' f/ o- g8 Z5 F
/* assign the tl som board LED-GPIOs*/$ ]" @' {9 I1 o
static const short da850_evm_tl_user_led_pins[] = {. n6 b. C) }, u& E6 D J, Y( j: r# c
/* These pins are definition at <mach/mux.h> file */
0 @5 x* s1 H7 a6 I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 u7 d: Q8 B% a, \+ J0 I -1; n+ c: Q3 s9 ^2 S6 Y
};) k. W q% C6 ]8 K7 T1 S$ U
7 L! }4 ?& Q! W/ Dstatic struct gpio_led da850_evm_tl_leds[] = {: }0 J% Q8 I$ H+ G3 b4 L
{, P7 `% N. y9 A, ^, _, p9 e
.active_low = 0,
: ^1 ~: L4 c2 B .gpio = DA850_USER_LED0,
4 R3 x9 N0 B' k. n! }$ Q .name = "user_led0", N4 H' ?' U' F: [- ^- {$ N
.default_trigger = "default-on"," \' S2 k, X" Q/ a9 h: z
},
* R( Z- B6 E p: \) g! m8 o {
1 `. D1 P0 C$ ?' j, a .active_low = 0,
) O+ l+ E# j) x/ e .gpio = DA850_USER_LED1,
) F$ m4 M& `2 }7 j .name = "user_led1",5 k/ i+ f) K4 n- E' b$ Z) P
.default_trigger = "default-on",
, X ?) v6 y( L0 }8 K4 R },3 x9 K L+ ? u# A4 H) J! `
{. w/ m. \ A) s. O0 g
.active_low = 0,, X' z4 x. ~. \+ ?! ?% U: \- Y
.gpio = DA850_USER_LED2,5 r: [# T9 V0 T
.name = "user_led2",: Y3 G- A; ~ G! [
.default_trigger = "default-on",
; t( y- M' W" u, t. H1 B },' g. z6 f% P! v" a- y/ A7 Y
{- U1 `! | l- I% L y% [
.active_low = 0,
8 `4 N# h$ w1 |2 T5 B* f .gpio = DA850_USER_LED3,
3 j! s/ g* q3 ? .name = "user_led3",
! |5 P/ l. G7 N1 O; W .default_trigger = "default-on",
4 m- ]; B! @9 E7 G },
" l% T2 u y: d; x% I};- j9 Z# I! N$ f1 g+ ], g9 v2 f
+ v9 |0 g2 G& z7 B' D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 ]9 U" C0 S5 c% @5 E5 [; X
.leds = da850_evm_tl_leds,4 J h h* h# S9 O4 M- H! @$ @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 b* z9 w C, K; H7 Y& N
};8 h7 R, f5 r# v+ }0 s
; Z3 {* N% q. V
static void led_dev_release(struct device *dev) D2 [ W- M/ l1 s* l; h+ T
{' d0 J6 p" S, {5 Z, U8 I, z* N
};: [8 Y) y; M$ Q+ d& d/ V
8 y5 W: q% P7 z6 ~0 }static struct platform_device da850_evm_tl_leds_device = {
* M$ }0 J( \: i) `$ K: k- W .name = "leds-gpio",, Q+ G2 O4 m( X1 l1 `
.id = 1,
& o- }% h q- r4 e5 n, J .dev = {
+ Q. R2 n. {, x' ~ .platform_data = &da850_evm_tl_leds_pdata,
0 M& c' h/ ]# b! w& v3 f/ n .release = led_dev_release,
# v$ y7 [! A& z3 @, x }
2 O+ G1 o# S( J3 O* E6 _};. c' I" b( `7 ]9 Y) q
3 o3 q# H, h7 h# sstatic int __init led_platform_init(void)3 P5 u6 n4 N+ K
{2 C& p, j: l& I! Z% l) V2 z
int ret;* K4 Y: d' ]/ r/ D+ Z: ?
#if 0/ z0 o7 V" K* g# u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 _# e% ~, a2 X: f: }3 Q+ C4 H if (ret)( D6 U4 ], k# r% U: Y+ T$ `" c2 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": D! w- ]4 {1 B
"%d\n", ret);
, h+ f& C$ }0 d1 {#endif
5 n4 x y( s4 O8 k; T ret = platform_device_register(&da850_evm_tl_leds_device);) h( k- i9 U5 ^: Q2 G
if (ret)' a& D6 j- Q9 q/ X% E) u: X
pr_warning("Could not register som GPIO expander LEDS");% h7 r( {# r/ U) k9 \% ?
else& | a$ b* Z% u, E
printk(KERN_INFO "LED register sucessful!\n");2 b6 G5 ^: O2 w% b* }
! ?; U) c/ g" G: r# V T, V return ret;
" i, @ s; H7 l6 g7 Q$ D- N7 t" U}. K! X- g- F j6 c4 D9 k7 z; M& t
1 v! R* V6 M5 F, v" b
static void __exit led_platform_exit(void)7 d5 ~1 E' H$ |& Y5 @1 l! P
{5 Z0 B o; p3 V9 N
platform_device_unregister(&da850_evm_tl_leds_device);
% }* J0 ?; s9 x& L8 G
7 t+ G1 s# f( ] printk(KERN_INFO "LED unregister!\n");
" d, S: o' e5 \# _. s9 ]6 w}1 s- {$ ^/ F; U: f* s( q
8 \6 U/ r) \9 e" Q/ cmodule_init(led_platform_init);
- z/ Z6 p6 ^0 zmodule_exit(led_platform_exit);
( M0 l2 R; W( g' |' \5 s' j9 K' m6 m+ R
MODULE_DESCRIPTION("Led platform driver");
( t# v7 t! C6 s5 \MODULE_AUTHOR("Tronlong");3 M6 s8 T) T3 y: R0 O; B
MODULE_LICENSE("GPL");
+ b# ^8 L* a0 W& W% O) [* U" _4 _; B% _3 X( S$ C
|
|