|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: H3 c. m+ ^, |" ~" u2 G% s" u8 L#include <linux/init.h># N" k) f. \* J c
#include <linux/module.h> `8 `% o* L$ O9 q6 I
#include <linux/kernel.h>+ d6 B( y/ F9 k$ v
#include <linux/types.h>& `) s0 X& J4 m) G% o/ d
#include <linux/gpio.h>3 H7 }, \0 ]2 e( d
#include <linux/leds.h>
" I& l" E+ Y& z4 t0 O, F: J#include <linux/platform_device.h>+ k `' f' f/ k+ v0 ~" G
3 f8 t, p: E; L. H2 R' f#include <asm/mach-types.h>
2 |, X6 n; ]( Z- b/ e5 j8 g#include <asm/mach/arch.h>
' i! v' |& v# B# H2 D#include <mach/da8xx.h>
" M# v( @/ h3 e; U) w#include <mach/mux.h>2 P6 v( x) k7 I/ M& `0 {
7 n! [9 h% h( w: \& E. U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 ~1 e: N2 t) U/ e `, u1 d6 @) p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, ]. p; t5 C5 n, C# n4 O' ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; i: c Z, c- w5 V ?3 D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 y7 K2 L% v' j8 O
6 V6 o5 g6 p% U2 G- f% a+ u
/* assign the tl som board LED-GPIOs*/5 z6 p2 J! Y( @
static const short da850_evm_tl_user_led_pins[] = {6 N* N8 n% @ @: k
/* These pins are definition at <mach/mux.h> file */ u6 q& }" X- F
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 j" m5 h9 ~, m' r1 F) Y1 _
-1
- ~) B1 M& S6 x};$ U7 x2 i4 w) A+ K1 o3 y# j- I* |
1 d" G; _7 w+ O; ^- x
static struct gpio_led da850_evm_tl_leds[] = {
|6 \4 V; G) \- J {( U7 X2 u" b* _( Z% g+ {. Y0 d& G
.active_low = 0,8 z" J) v* Q! R
.gpio = DA850_USER_LED0,
" I; m& s! b3 y. Q$ g .name = "user_led0",, K* {* a/ _1 R$ d% z& {4 q+ f% n
.default_trigger = "default-on",
0 U7 j4 t; U8 c* i4 r },
9 ?; Y- A+ j0 `" Z0 s; @2 R {6 h% t a$ U: i3 X% H
.active_low = 0,
% y5 ]4 l$ l L9 ? .gpio = DA850_USER_LED1,
0 U2 o9 D0 J9 f6 P .name = "user_led1",8 h% Y$ C( R' X# E) W4 ^
.default_trigger = "default-on",
: z- s/ Z4 H- T: w% \% l) N },7 [4 X7 {* S$ _) B
{
5 u& j) K% N0 E. z* b/ g+ z" H4 C1 I .active_low = 0,
# `1 @/ T9 @4 ^2 N1 K0 Q .gpio = DA850_USER_LED2,) _6 x' t8 T. E; _& F& d2 W3 y
.name = "user_led2",: z/ E; K, _( T0 e( n
.default_trigger = "default-on",
, Z0 H( a# ]; f: \" B: N },. U8 i3 P% O- W5 t, v0 F7 n6 U
{
$ g0 G3 ~0 r: {* x: ~3 J" |5 D) [ .active_low = 0,' H; K) _) c; C: o$ x0 N8 y9 e
.gpio = DA850_USER_LED3,
' f, z7 P% }8 i1 l .name = "user_led3",7 x; J) D# M/ j+ |, P
.default_trigger = "default-on",7 | j! F" N" J
},) ^; ]; `, {+ U/ B( q: f, e
};( E; ~! ?* f% C5 z: V' ?
; n) i! G* g, P% ]2 m0 X1 `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# e8 @( {( s7 Z. x3 Y# B8 k
.leds = da850_evm_tl_leds,: d j' ~7 `6 ?/ }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% N5 T' @* X. {+ z! D2 Q};
$ W0 n& X! V, [# O8 I& L
% y$ ?2 K+ U3 B+ i+ ?static void led_dev_release(struct device *dev)
( H6 g- C5 F/ {5 s- [1 F{
[2 f8 q1 K" o& E, y0 v: J& \4 Q};; P; B" b: h8 N* J$ {/ j- i
7 M' Y" i2 ~ e8 Y5 D' O4 jstatic struct platform_device da850_evm_tl_leds_device = {3 t0 f% I3 b, P! N( ^
.name = "leds-gpio",8 Y+ `: S+ o- |- O& E
.id = 1,
' o8 i* y4 d, s .dev = {
) `0 }. z6 u9 ~8 v. s .platform_data = &da850_evm_tl_leds_pdata,
( M% E1 B: f7 V/ I- o; L .release = led_dev_release, N! O; o: {4 A: ~+ r4 }# V
}
, U2 I* T5 N/ v) g* z1 I};4 n J. v0 n; Y: o
( V, u' O% h+ {! k* w; u2 Fstatic int __init led_platform_init(void)
# a+ B2 z# y; J$ k( k( K4 g, o{
& d* f" }* n8 o8 j9 j$ Z- F5 T int ret;5 O% B+ L* }- m: S5 [/ B
#if 0: J+ c! X5 J" Q, o
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ W5 T' F3 s7 X- X" m3 F/ a1 L! J# q% c
if (ret)$ m$ |" i4 z- W: G! ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". Y: K1 o! H( k5 p1 x
"%d\n", ret);
; r& h6 ^' Q5 K+ W! N% j#endif& T7 T$ S6 M6 K+ \, f
ret = platform_device_register(&da850_evm_tl_leds_device);9 m+ G; I4 P( y6 d3 u8 C. s" ?
if (ret)
- R( t [$ m0 _3 x6 s pr_warning("Could not register som GPIO expander LEDS");/ H3 X9 o5 {9 C3 m+ V# h
else; e. O+ {9 x5 S& V: Y/ R
printk(KERN_INFO "LED register sucessful!\n");
1 e F0 v$ v' B. g( T3 j. f/ p c8 R r7 W8 p1 ~7 K- U
return ret;& x: T4 ?. H9 B' _
}
: p: d! e3 a. G f2 ?* u* ~0 C7 d2 n3 k6 E4 Q/ {7 J
static void __exit led_platform_exit(void); [6 A# c& i, h, J6 }- n$ m0 P9 Y
{
6 S0 N# |) A8 }- A+ n, p platform_device_unregister(&da850_evm_tl_leds_device);
0 ]7 e( |& ]" i8 A/ m$ x9 k: J9 ?
printk(KERN_INFO "LED unregister!\n");, p7 f% K' M! x. _6 T
}% X0 b' A6 I/ R0 Y# o, z' v$ G
& K N9 n# d3 s& J5 `5 g; b
module_init(led_platform_init);
) ]# R0 ^" D0 `module_exit(led_platform_exit);" h5 S5 {# f5 b% P( L3 p
$ y, a" `( e- o% y
MODULE_DESCRIPTION("Led platform driver");7 s! n5 d. j9 M6 ~9 p z
MODULE_AUTHOR("Tronlong");0 ]' \/ d- Y6 D) R; J- `) \+ e. u
MODULE_LICENSE("GPL");
& }7 d4 w' ]. }0 i. [ S5 R) w$ Q5 K8 t7 }& \6 k. [8 A% u
|
|