|
求大神给下面的程序做注解,请稍详细些,谢谢。8 n v, M+ U4 O1 h& r! l
#include <linux/init.h>5 y B3 h ?& D! l1 [" Y: u' G
#include <linux/module.h>2 g2 h. ?$ i' }
#include <linux/kernel.h>" m) O, F8 }8 y
#include <linux/types.h>
8 Y* J- R% Q( V5 Y" m P#include <linux/gpio.h>
3 F3 Z) {9 y6 o/ U+ S. V3 H- t#include <linux/leds.h>' h' B5 X0 l0 l' |4 ~5 P o! e4 ^. o
#include <linux/platform_device.h>
) _* e+ x2 A7 e, x
- |: U4 s. w7 i5 N6 E* t#include <asm/mach-types.h>
* k5 U" ^7 ?* i' g+ _) G#include <asm/mach/arch.h>
( z* W o! p. {: p$ }; T' T#include <mach/da8xx.h>9 U( s: m; [4 L
#include <mach/mux.h>
6 b$ D! Y; n+ V7 Z: E+ B
$ W3 ?1 U3 ^5 Y) d" Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# e5 [6 s; {5 z" m1 s% a( d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# y8 K p6 V% c+ n0 R" F0 h' o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ q0 b* S- U: m8 ]6 s- m3 A) k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: Y+ K2 @) x0 p% z1 Z
# }2 k6 M* y9 ?2 y |/* assign the tl som board LED-GPIOs*/
* x& k% u: v$ W+ F. Tstatic const short da850_evm_tl_user_led_pins[] = {, o" I0 d0 [2 s5 K; o' B# c
/* These pins are definition at <mach/mux.h> file */
9 D3 s4 i5 D7 W" U* P, A& Q, N. b+ k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! a: Q4 h" M6 H! T* {' M7 l -15 W$ T$ D1 f, f. B8 M3 q s
};
( Z3 |+ `1 }" R& U! U# A6 e' \5 y/ T1 H3 J" `, H# M8 K4 y
static struct gpio_led da850_evm_tl_leds[] = {$ G1 n% _/ P7 b
{
. |% u8 G. n2 f( E .active_low = 0,2 d& H+ I9 T: q4 ?' v& v% g
.gpio = DA850_USER_LED0,; d, C. I4 b3 d3 V# @
.name = "user_led0",
, ^, P! F+ `* Z+ ` .default_trigger = "default-on",; K n2 g: Y( t! p7 e* E
},
# i. g3 g* v8 f8 A0 d: m {. ^2 b8 z, r$ J
.active_low = 0,
" r, e) ^* i, |5 y {, c& Q .gpio = DA850_USER_LED1,4 |& k2 T+ J! p' m. E w% l
.name = "user_led1",
% |( W! v! Q8 j7 ]$ ?& r7 h8 n .default_trigger = "default-on",1 o: Z$ U/ l( S4 K) X5 m2 g- A
},# Z; `- J* r2 Z! `
{/ k' [6 v% B$ J3 B0 v
.active_low = 0,
4 E h1 T) @6 V: h# e1 v6 y .gpio = DA850_USER_LED2,
2 W/ q$ s7 B6 x2 O; R) A .name = "user_led2",
2 \2 B$ L5 J) i9 H# M .default_trigger = "default-on",
1 s/ G7 f6 e) L3 `' L8 W: i },8 B6 ?" M% ]) _4 q
{3 K: U$ v ~7 l7 {- [% x
.active_low = 0,6 {1 ^. }7 _! z. v. p
.gpio = DA850_USER_LED3,- Y7 c) T4 u' d' |3 p
.name = "user_led3",- Z! \7 |$ c& u4 V; i
.default_trigger = "default-on",
3 `$ N0 A% G' F% V },
+ h: c! L) p; B};
1 a/ o6 A$ ?8 X5 r) Y; t: [8 C( M* @0 s
9 ~2 r0 K# c- Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 K+ B0 N: H% g
.leds = da850_evm_tl_leds,0 b+ h7 U" `4 ~: W1 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 s! Q: G. G A4 I};
. b8 O9 b! q- R2 r6 K0 @; i) _& I. e$ V7 L
static void led_dev_release(struct device *dev)
4 r. _. a' F, n/ z5 ]{$ n r' a- F" ]! K
};4 _ Q# Y* ?7 s' G/ O+ h A
/ r x6 k- q7 ]: i! S5 P0 z" Zstatic struct platform_device da850_evm_tl_leds_device = {
( O8 }' L( W* x$ q j* Y; I .name = "leds-gpio",
7 `* J' F; \& f" T .id = 1,
V: Z) I: y6 K& ^! Y E+ [ .dev = {
+ c7 T; E' C1 L .platform_data = &da850_evm_tl_leds_pdata,$ S& Y9 J1 z% v* q
.release = led_dev_release,
7 r& \1 U, m2 ], G }3 @ r5 L" [; f, r a* E7 w
};0 ~! c# w _# q. M
# A& ~1 i2 A$ V, J+ N
static int __init led_platform_init(void)
' i6 q$ n- H, R9 s. e{
7 y0 Z! [6 A; J4 } int ret;
V3 b r. R: N0 Z( s ?#if 0 R# K7 v# |; R, R2 h/ k" |2 |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 }% ~% X3 B7 n1 f4 t: m
if (ret)7 ?+ c, ]4 _& F4 S: K+ W# F Y& l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; I: v8 K$ R+ D+ i
"%d\n", ret);: d# e/ d" V3 i4 f
#endif
( S# [/ {1 E. [( \* f ret = platform_device_register(&da850_evm_tl_leds_device);
7 l: V, p/ a# a0 i( `' x: e2 k$ n if (ret): ^$ ^0 a! @2 m
pr_warning("Could not register som GPIO expander LEDS");% @2 l/ T t; S t4 o
else7 ~- f0 g8 J8 \ R
printk(KERN_INFO "LED register sucessful!\n");' w! M9 x. z5 K; d$ L& t
5 N; C# `( P. s# d
return ret;
; {7 n% f0 j, m, l! ^* ~}
8 }* e9 t7 V$ G/ U0 X2 }0 `! h% L: _( q- ~, j5 r9 v; K# O' m- L
static void __exit led_platform_exit(void)/ ]2 R) ~6 d5 C
{% l! U8 X. }8 E' k1 ` Z5 J0 K5 C
platform_device_unregister(&da850_evm_tl_leds_device);
- s3 d, f! W8 ~! W' Y( ]- V/ S) a$ m. }* Z- U
printk(KERN_INFO "LED unregister!\n");5 n+ A% p+ ]. o
}
1 @& h' h4 j( m P' v) c
! ], m3 i4 q4 m N1 tmodule_init(led_platform_init);5 q7 t( T& c4 X
module_exit(led_platform_exit);
8 q2 I2 R O: m9 F9 J
8 Z$ _( U' d; P$ j) c0 |: M6 }# @MODULE_DESCRIPTION("Led platform driver");4 P+ }% l7 ?" @: o: c$ s
MODULE_AUTHOR("Tronlong");
4 y. y- y- U" e# a4 s3 aMODULE_LICENSE("GPL");
4 v2 O9 r" {2 `
) V$ f3 r! L4 S3 ~" ^1 f |
|