|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ O" A$ E# y$ p, l& A#include <linux/init.h>
T }$ E; s9 `4 j4 j, g0 ~#include <linux/module.h>
! I# G$ E1 c4 ]- N7 y#include <linux/kernel.h>9 i% c0 ?6 F7 i: B
#include <linux/types.h>$ e; q1 f) x% l. Z
#include <linux/gpio.h>
0 b0 ~% G' l) U M0 d9 ?- b; N#include <linux/leds.h>: W$ ]7 o/ r. O! _# R. v
#include <linux/platform_device.h>
$ ^' S4 U: k4 x H
8 ~* ]! J E: T R7 \0 U#include <asm/mach-types.h>
( J# U2 d/ k a4 ~/ k#include <asm/mach/arch.h>! u: ~) L" T/ ~5 Z! r( \* K1 g
#include <mach/da8xx.h>" T) i' ?( w5 [9 {: v$ R( L
#include <mach/mux.h>
, o1 D) d1 O: m+ T4 w
2 q5 R9 ?7 j7 s' b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 v7 G7 p8 X6 {5 @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 ?- d) `9 s) [. G P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( s# B7 D r* b- g" i E5 P5 \$ c0 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. y+ e) l( T5 U
; T3 q# E. | ^' k/* assign the tl som board LED-GPIOs*/
' I# _, S y& estatic const short da850_evm_tl_user_led_pins[] = {6 M/ z7 x6 j' U+ G+ O! a
/* These pins are definition at <mach/mux.h> file */
3 C8 A& a' {, q" \- D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 n, l) Z, C; N' S1 r0 U% H
-16 C1 |% ]4 Z' |% B- j; w; E
};% W0 D" R8 e; v! S7 b
0 W @7 k z: n) G4 c. c* Astatic struct gpio_led da850_evm_tl_leds[] = {
# }; ^ q. M2 s5 G9 v0 P {, H. w# u4 [* @
.active_low = 0,
9 R" F; p- B7 Z4 W& F .gpio = DA850_USER_LED0,* B6 `+ n2 u o% h) R
.name = "user_led0",6 g B" O9 H2 c' |3 E
.default_trigger = "default-on",
! j d! C1 U4 ?2 d# q( o) _ },
3 O+ I( r7 W6 |/ h" p4 [ { L9 z9 ]6 g% l4 S$ M- @% X
.active_low = 0,/ S& c% |* E0 H e7 o
.gpio = DA850_USER_LED1,
: \9 g; p, y+ `8 k .name = "user_led1",
% Q$ R' i5 |% \* M* |9 ?2 B2 a .default_trigger = "default-on",
" c9 i2 F$ e5 M* z },
7 P) ^+ W5 _$ x5 b; t7 w {1 m8 ^7 y' [7 S* E& v: U$ F( {- d" R
.active_low = 0,
5 j0 `* u. M3 ~0 d- b# J8 q& j# ` .gpio = DA850_USER_LED2,( B9 B. l0 N4 j9 F
.name = "user_led2",
3 b, t* w6 J- v1 }- Q .default_trigger = "default-on",
7 Z# p( c" m5 f& e/ i& Y },
8 P( X5 k; P5 ?$ F5 Q6 q/ C {
* H; R" q9 ^1 u' P2 k .active_low = 0,, d7 O4 [4 }- \ E+ p; ]$ N
.gpio = DA850_USER_LED3,
' K# q% p& r7 Q* |$ G9 E/ q% K .name = "user_led3",. |8 O, u R4 h6 |
.default_trigger = "default-on",5 \# e! Y! V7 ^* [
},
, Q& N9 _1 G& Z};2 ^; u- `8 j8 D" ~* V
, _- t& @0 o2 x; t: ~& v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* x- B' x: L5 e/ h; n5 j z/ a
.leds = da850_evm_tl_leds,: w: F# l8 y# A+ j8 i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, p+ ~- n0 r5 K1 a% `};, A z; ~7 ]! }8 ~ s3 I' y
3 y R9 ~; T% }6 o. W
static void led_dev_release(struct device *dev)7 S5 e w T W6 M& g
{
2 D! ]2 j" _" @/ P& x! s P9 o$ O};
N8 O7 T" K! z4 C; n$ f5 J* `. r- u g+ R: ?, i
static struct platform_device da850_evm_tl_leds_device = {
$ Q; [6 {% y3 B4 k .name = "leds-gpio",9 F/ Y+ k* T6 o# D
.id = 1,! ^ O, G, n0 a
.dev = {6 A0 [* m9 g8 Q3 ^# F2 }
.platform_data = &da850_evm_tl_leds_pdata,: K+ F+ X; L2 `2 I
.release = led_dev_release,: H, t# v! @( ?0 Y2 }: U
}: E. I+ r; ^. @
};( F- R/ `# m; V% }7 [/ i o% w
4 J2 v* D0 W) Z/ D, _. ?
static int __init led_platform_init(void)% c/ M) A. x0 c, k1 ^
{$ z% q. J, O8 }3 F2 `3 Q
int ret;% `( e) a0 X2 D- g2 G* b5 ?7 I
#if 0
* {* l4 o2 n; j! a+ p. O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( P) j9 d/ R3 P& Y6 S, Q
if (ret)! Z2 b2 b4 Q+ U1 L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& n, L7 s1 _" S" ]8 }+ D V "%d\n", ret);
( t( _6 q" N- [9 _; w" G0 x#endif" T5 n5 V* P7 U5 G( c- a
ret = platform_device_register(&da850_evm_tl_leds_device);' s; Y' o2 u/ \' C
if (ret)
" n! H6 ?9 ]0 I r% q2 g pr_warning("Could not register som GPIO expander LEDS"); f/ D/ o) X! T
else
9 p% I! N9 S( C5 o+ V printk(KERN_INFO "LED register sucessful!\n");5 T" V) X0 h2 E, d
" p R4 y) x/ q: K3 f4 T6 z/ `
return ret;
8 a/ o8 h, _/ q Y}# {' r: v1 r. H( j. d/ X
0 d6 s; S8 H! I3 j( c- H& J0 F
static void __exit led_platform_exit(void)2 _, u9 B3 L! P" ` V, C( z" z3 w
{/ w/ \( f5 C# H0 ^; {% t, `% q
platform_device_unregister(&da850_evm_tl_leds_device);
9 ?3 \" q% F7 a+ c
) A# g+ v Z! x% l printk(KERN_INFO "LED unregister!\n");
, X z( W9 F7 p1 B; t' k4 g}+ A& o1 w) {7 z3 S' H8 J
# e+ J R0 N' s- d' r8 a5 h+ ?# @3 ]module_init(led_platform_init);
9 [" X" y0 W' \, `3 H& Jmodule_exit(led_platform_exit); _2 J& v8 q1 q
7 O5 b( \! z( ?* l5 ~, IMODULE_DESCRIPTION("Led platform driver");
. c7 ~; R: K" R# u* _& G% lMODULE_AUTHOR("Tronlong");
# T( @8 ~% [5 z/ TMODULE_LICENSE("GPL");7 v" S2 Y X4 C2 R
6 P- Q2 j, y% w" [& B. \ |
|