|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' ^2 h" H1 J( g
#include <linux/init.h>7 S$ ]! D! ~; L' a
#include <linux/module.h>$ l! d3 T+ f! }% t- G: ^
#include <linux/kernel.h>
) [+ |) w+ U9 W2 D! g, f: Y: y#include <linux/types.h>- d/ r; B& q) c) I4 d
#include <linux/gpio.h>* h a% O) a! K' O1 W
#include <linux/leds.h>6 `+ B/ q/ p9 E3 @4 \/ r( L
#include <linux/platform_device.h>, E* q& |4 i3 v6 { {
3 j, |4 m+ ]8 J) F% Y% {
#include <asm/mach-types.h>
4 P7 Q* `7 z6 E% L, A$ u: Z3 f. ]#include <asm/mach/arch.h>
- h4 `; y& ?9 X* N% S& j) H. D#include <mach/da8xx.h>
, T& A p- v0 A% ?& I/ U#include <mach/mux.h>
7 j+ L+ u& ]% `- N! I+ Z2 i
1 Y6 I# g1 H; f2 S' l#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& q9 k" M7 X# V- A" ]$ h+ f5 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 ^. S# N: g Q# x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 Y1 m6 d! q# S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), [( q& p$ t% t) Z5 R
+ m k- h* ]) ?& h b/* assign the tl som board LED-GPIOs*/& P7 a$ f$ F2 K- h- M9 y. n+ Z ^
static const short da850_evm_tl_user_led_pins[] = {+ H' J7 x7 C2 I9 b/ ^ [
/* These pins are definition at <mach/mux.h> file */9 M9 b" x8 K- r' A1 g k- B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 k8 S9 J: i% `8 {$ B! |) i9 \$ u -1
* ~8 C |! b7 S" p4 l% Z};) y9 _% l9 A: K4 u. D3 @: @
t# z/ P+ u4 Y1 |8 k3 E
static struct gpio_led da850_evm_tl_leds[] = {* M8 K" M" H p
{
1 [7 W% ~1 }2 o; N .active_low = 0,) ~, x4 u4 J1 N
.gpio = DA850_USER_LED0,( e. P; C2 d* C; ] w/ q
.name = "user_led0",, G" ^" H+ q( P% K) Q
.default_trigger = "default-on",
) N- c* r a- U+ A* b5 P },
9 `- C, L# i; Y {
4 E) P* B$ ]- `# d% R .active_low = 0,
/ {; ~% Y, N" _8 Y1 R; L .gpio = DA850_USER_LED1,- h2 T) ?% G1 u
.name = "user_led1",5 P1 F- i9 M" A( h* k
.default_trigger = "default-on",
3 S% Z# Z9 d7 j0 v/ L: l$ `+ g },8 O+ c. S2 P" {6 `
{2 c1 M; Q, A" L ]- V) O7 X( W
.active_low = 0,3 l- g7 t- N s j( J( z
.gpio = DA850_USER_LED2,
8 v& I; s# D. A+ N .name = "user_led2",4 ^6 u2 L; y3 ~4 a
.default_trigger = "default-on",$ z- H g3 E, M1 b* U" h Z
},
% }* }! g) e' h% m& k/ b/ y7 A! E7 u {
, T( p4 X- q2 `; { G! ? .active_low = 0,1 ~) ^! @" S h0 R, s& y
.gpio = DA850_USER_LED3,& d- K8 X$ y" c# p
.name = "user_led3",+ u8 S( @8 y M; u9 V
.default_trigger = "default-on",
$ _: Y- y- r$ y4 n/ w( y },
! m0 |; i' m6 z" k};
. f4 i O5 X9 ~( K, t: b2 \7 ~
9 t1 i! w1 X5 F9 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: D. s3 J# f: q( f
.leds = da850_evm_tl_leds,
/ l9 H: z% @- M+ I4 N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 k3 }$ n& v, p5 H- d6 {/ J
};! M2 G: P. ~$ i( q6 W. E9 G
% C+ `+ S- U# W$ T. Z9 Z8 ]# a
static void led_dev_release(struct device *dev)
0 a, q& r9 m9 \+ a{- s! |3 I# k7 h/ p8 Q
};
' r0 |% _: {5 I3 }4 T' h4 N) j" L [1 ?& M
static struct platform_device da850_evm_tl_leds_device = {# u# u! A- ^% y. i$ M: w2 d
.name = "leds-gpio",
: T. _8 H- D; H .id = 1,8 C2 c1 T% y7 c0 U: Q8 K
.dev = {+ b. t& z/ V7 T( M6 f+ F7 [
.platform_data = &da850_evm_tl_leds_pdata,& M3 a/ L- E2 y
.release = led_dev_release,
: j# }5 s |8 P& }5 G }# z7 a1 n, |0 c1 h5 O: a
};3 C( ~3 e# i7 B4 m
7 x, g* I1 K# j' R2 Gstatic int __init led_platform_init(void)) Y) e4 @" a3 J6 h! H
{
1 a4 k; H. ] g l0 W# a' x int ret;0 \7 J9 i' O$ k: ? w: J
#if 08 g, c0 m" }, g6 E/ P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" a- p6 B# P4 A/ H if (ret)6 A6 t5 W7 B, B! q& K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 Z$ I( S. E$ Q6 c$ M a! k
"%d\n", ret);
6 \0 U, ?8 P6 m( Z# g# ~& ^#endif
9 B( O& O% `7 g ret = platform_device_register(&da850_evm_tl_leds_device);
! l8 B: m! K% i if (ret)/ [/ S& x2 L4 q
pr_warning("Could not register som GPIO expander LEDS");0 Z" A$ F0 a! d2 \
else
e- }% M( L% {7 Q printk(KERN_INFO "LED register sucessful!\n");
. z# \& u* _1 {) ^( T+ v
7 q8 e, v0 Z1 c return ret;: [+ c, b# r1 r& @; }. t
}
& G: U6 O+ Q0 P( g6 W7 d* a# L" A4 z/ w% M: s& x) P# ?
static void __exit led_platform_exit(void)( x& F: @! m+ ` ^' E
{
' j L$ X: P3 y* N platform_device_unregister(&da850_evm_tl_leds_device);
$ X, Z$ n* u" ^( Y/ b. T# A; N/ H$ }; |. y7 R# d/ @
printk(KERN_INFO "LED unregister!\n");
1 X7 P. `$ \# m# ?}3 ?3 |6 R6 L( X, c
' \/ x8 ]3 \4 B: {% t# x: o2 w
module_init(led_platform_init);* m5 G: F# ^1 |% G4 H" U% T
module_exit(led_platform_exit);
- c6 R& J# I$ k0 O/ ?1 v: Q7 ?: k& j" Z { x; M$ J. g. r
MODULE_DESCRIPTION("Led platform driver");0 r @9 K" l9 Z, H5 e
MODULE_AUTHOR("Tronlong");
* K& m: P! Z' h8 n( A6 n7 DMODULE_LICENSE("GPL");2 O) {8 }" g4 d5 K8 i
8 j8 A: r* L9 Y |
|