|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 ?5 Z" N% H6 Z" Y7 ^#include <linux/init.h>) j; n$ c6 r8 b
#include <linux/module.h>
7 l9 d2 z" x' @: c, j#include <linux/kernel.h>" ?' r& _3 j9 _
#include <linux/types.h>
$ v: Q1 E$ M. U$ q! P9 w; A#include <linux/gpio.h>% h8 q; W4 i0 C1 T- O
#include <linux/leds.h>
. Q2 y+ j+ M. H; p0 J& `#include <linux/platform_device.h>
: F: ^6 F$ G% a1 P2 H# K1 a- |# R D1 m# m
#include <asm/mach-types.h>$ I) N9 r0 B! B1 U
#include <asm/mach/arch.h>; b m" H& q" O
#include <mach/da8xx.h>- C& t1 P' ?; q7 o7 g! Y9 @, m( o
#include <mach/mux.h>
/ h. n" e* ?$ f0 y8 e
6 z. P+ ~5 f" j/ S( G& z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 }" u* _" b+ q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). q: W: E$ X: ?, o/ u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- C/ ^' z9 i# C2 ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 o8 \% L. o% E
% S; m6 a% _( s% L& g! K6 p5 ~/* assign the tl som board LED-GPIOs*/
+ H2 r& Y$ D4 M8 c! @. Lstatic const short da850_evm_tl_user_led_pins[] = {& W; J! z8 i# x( K. Q) o
/* These pins are definition at <mach/mux.h> file */7 ^2 L) u4 c; x, n, \* l* ?" n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& q/ q7 X7 S, Y' V4 @
-1+ [; |& c; I8 F p! e8 R
};
8 B8 ]# B. M; m( K) i: h! n- e
j# Y Q A- M1 o9 l" Gstatic struct gpio_led da850_evm_tl_leds[] = {$ v% @( M& W* X7 h k' i9 A5 ]
{5 |, y( ^9 f/ s* `* g% [- \1 Z
.active_low = 0,
( s, j4 y, D/ T/ K& S9 m .gpio = DA850_USER_LED0,
. T3 {1 |5 E5 L0 [/ ]3 c+ I% N3 \ .name = "user_led0",9 m- H( Y/ H7 {) W" J9 j' g& k
.default_trigger = "default-on",. s# y4 i/ x0 E
}," y( s6 d: l0 y
{) c, J$ M* V3 s1 P
.active_low = 0,$ I6 i% l T+ n5 o$ V6 n* `( _
.gpio = DA850_USER_LED1,
4 o7 V3 C3 Z$ ~) B( E7 R+ y# t .name = "user_led1",0 j1 z% l& u1 Q/ K4 o
.default_trigger = "default-on",2 G4 t0 s8 Z) q/ p/ H4 Y
},
- I( P" o) @; H! k {
$ b' n5 U% U3 ]& W' \6 O! w( E .active_low = 0,
0 P6 N) K4 I$ r* n1 w Q .gpio = DA850_USER_LED2,
* W6 H/ J; D/ W; D .name = "user_led2",
( X# Q& i K% g$ `+ a5 v& v .default_trigger = "default-on",
3 l" U2 W+ v% A },
6 l1 f1 k0 |9 Q* y$ B: y {
& r. _- v. W* ^4 d( i- I1 |* M .active_low = 0,
: o, d8 t& X( Q8 m6 h% D .gpio = DA850_USER_LED3,
: _$ t: |1 n. r* Q' j. j .name = "user_led3",
' f2 t- F# v1 D4 y! w/ t5 } .default_trigger = "default-on",
) k# b2 Y M0 o2 |# d },
! u4 u! t' b( @# l};( p2 Q9 E0 a& W& y2 r1 L. p
7 c/ g1 l' B9 {. i- K+ h: j: H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 g1 E" K# ~1 ]1 N .leds = da850_evm_tl_leds,8 X$ s2 T3 b8 K4 o; }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 S& o; _) x# R" a4 z};! S v% m) @* Z& f Z
3 V" M2 G5 S! c; ~static void led_dev_release(struct device *dev)9 W* i1 A, W7 K# z
{7 v( d* m7 R& Z/ [9 g
};
5 I- l! r& F U+ h0 x' r. X
' {, ?1 L- S, G: G1 k! Q4 G. lstatic struct platform_device da850_evm_tl_leds_device = {
1 n: U( o$ y6 D: l: u% g1 ], p .name = "leds-gpio",; }9 W f- ?' r0 S
.id = 1,; b. H3 I) n6 O# C& v. p
.dev = {7 m8 ^8 L. p& \5 i K o# U8 S
.platform_data = &da850_evm_tl_leds_pdata,
7 {( b- ~2 w6 Q6 q& W8 k .release = led_dev_release,
% _9 T4 i2 X, L% R5 d# v, k }6 I$ V; w4 b% B+ b" P! U9 d
};
( _- ?" ?: P- b! r' j) i) Z i& M1 G$ B+ E
static int __init led_platform_init(void)& D* T8 [5 @, }4 D; X
{
4 k8 [% Y) I3 W0 l7 R- y$ w int ret;+ R' r# k# V; y% V! _7 m' C$ q
#if 0
8 w% B3 w+ ^5 \, T$ W6 v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
j+ Q* k K7 o3 X if (ret)( z( O, v, \" b! b2 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 @" `# D2 q. f: R: Y! ^+ {9 |
"%d\n", ret);
2 {: o8 @& n' q# s4 ]( n' Y* \: l#endif! G t6 H% e( f( o- m
ret = platform_device_register(&da850_evm_tl_leds_device);
2 ~& h: p n0 Y; o if (ret)4 e( }5 x, f: W& i8 q5 X n" m
pr_warning("Could not register som GPIO expander LEDS");
# a& t8 I! |) u" q6 f else; T/ }3 }8 s; n. s# s0 _+ ]
printk(KERN_INFO "LED register sucessful!\n");
$ n, B7 F5 I& Y9 w& ^
: A1 [- O$ O8 P5 I2 I return ret;1 L! g! c4 p. o, h* a" O
}9 O, G( p# s$ q' P' p
( q8 w: j7 A7 Q. \ l/ q7 z( Wstatic void __exit led_platform_exit(void)% Q. z3 }$ J& s/ z
{. d; I6 R0 ]) l5 e* K' [2 a3 c7 z
platform_device_unregister(&da850_evm_tl_leds_device);
7 h. f; O3 Q8 K7 e) o
. \: { t5 w3 h* V& g& S' D4 O printk(KERN_INFO "LED unregister!\n");$ r; \5 i5 A. f1 _6 ?0 W( O
}0 J' t/ a& Q- f# J# F
/ L1 K. a5 K, N* ~3 X( umodule_init(led_platform_init);
( j# g5 p) [7 G2 s5 w! \module_exit(led_platform_exit);4 @4 Q3 G+ m0 q! B2 [6 a6 X
& C5 S, {/ r1 F5 ^1 [3 _MODULE_DESCRIPTION("Led platform driver"); E( ^/ [; F7 U7 |0 q
MODULE_AUTHOR("Tronlong");
4 V: @; S1 s1 ]9 U, }MODULE_LICENSE("GPL");
7 i0 K; ^: a( _* H
( [( ]% u; y! c7 T |
|