|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 c" ~6 p: P: |2 h
#include <linux/init.h>
* U: [+ T' U+ c#include <linux/module.h>2 x! ^: O' W. m4 G
#include <linux/kernel.h>' u- ~0 y/ ?- z4 }1 e; i0 v+ D$ C
#include <linux/types.h>7 V1 D8 f! r1 Y1 \3 V
#include <linux/gpio.h># R2 z8 W" N, H* b, U4 N( q
#include <linux/leds.h>
3 U2 F; L9 g! z6 k#include <linux/platform_device.h>
, r/ [% l, M; W
, c. y, E' l5 I- Q. C" ~, n8 v: k0 [#include <asm/mach-types.h>0 g0 q4 p' ~+ t. s
#include <asm/mach/arch.h>
# T, H6 ?7 h8 y$ ~#include <mach/da8xx.h>
. S. z) @2 Q1 k6 {$ g8 ]7 }+ P- R#include <mach/mux.h>: i1 l7 A. F8 v! V+ E2 E
- R8 L R" T! X: l" v( w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" H8 @7 j6 E* u/ x) M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 o [. ]% _4 C' r/ G( \7 p5 @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ K% O& |4 m; I4 M, v3 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% {. o0 m, [) r9 D
. p1 S, v7 ?8 ~ o- p3 Z1 W/* assign the tl som board LED-GPIOs*/
+ @) ~0 B( f" Z6 s# x8 p& r1 k$ g# \static const short da850_evm_tl_user_led_pins[] = {# j& j9 i/ g) Q/ D& a( G
/* These pins are definition at <mach/mux.h> file */. f, e' M7 d0 O# g* y( x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ c0 e9 u+ ~# q2 Y" b& J, p
-1
" u; @. R1 N7 m; V" ~( T};
) u5 d; _8 u4 S ?* E1 ?; v ^" m" O; @; T
static struct gpio_led da850_evm_tl_leds[] = {
( `2 l5 i1 H6 h# m$ h {
) W+ T( _6 Q5 f `9 _ l5 x .active_low = 0,
9 [" ]7 ~3 X3 u% i2 w .gpio = DA850_USER_LED0,' b# b& A) g$ N* B* K1 A3 _
.name = "user_led0",+ N u: i# P* K& Q+ }
.default_trigger = "default-on",% E7 o6 B, Z% F2 L
},( ^, D& C1 }$ ^
{
5 X: N' b# b, J( ?7 Y .active_low = 0,
3 g+ I) D0 W: ~+ p5 _% m2 R .gpio = DA850_USER_LED1,, G. \7 M3 |: _5 t' } {
.name = "user_led1",
* x% _. N; R! N% H& ?( w( P: s .default_trigger = "default-on",
1 S2 X$ J# R) n8 ^: K* ]- a; H },& P1 m$ f2 K7 S" |
{1 [* |. p7 G9 s7 w) U
.active_low = 0,
* i. f4 h! U) ?% W0 Z) w6 b7 p, M) v" M .gpio = DA850_USER_LED2,
2 m1 ^$ ~% f9 X7 S5 S# Q/ | .name = "user_led2",
: b, j! k6 [! V3 M .default_trigger = "default-on",+ N2 K% s, |9 S; T Y+ @) y" F
},
( Q/ }+ M# S+ h/ j: c {* W8 a# Z( Q4 G
.active_low = 0,) j9 k. k( {% _! u& e/ G& C2 c0 Y
.gpio = DA850_USER_LED3," z$ p+ t& ^/ t5 p; {! o7 J
.name = "user_led3",# m! c) V K/ s+ P' z, U" S! f
.default_trigger = "default-on",
; ]1 |* C+ U/ D% y },
0 ]( _! n4 @! H- z};: k- J! o" J& ?8 P% S9 N0 p9 D
& |& f) n b0 X. Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ }) P2 S, Z9 D1 z% { Y .leds = da850_evm_tl_leds,% h B$ K( y, U& Z4 h. [3 H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- ?( S6 ?: N5 u8 Y- P};
4 |7 @) J }' F: D( p( X. ]3 _6 q: ^
static void led_dev_release(struct device *dev)
$ G) m. k: K1 z{
. P# }: Z. u' {};
* C% }% ~ ^' m5 }% [
. X' H- h3 x% H% Ustatic struct platform_device da850_evm_tl_leds_device = {
' R! L3 J# C3 F4 S( U0 P) ]( Z/ h .name = "leds-gpio",
" ^1 e) V' C1 \' F, ?/ N .id = 1,
& d9 L( S# L& c$ c6 ]4 ~ .dev = {
2 H8 R( G9 r7 j0 Q0 N .platform_data = &da850_evm_tl_leds_pdata,
# U: x [5 J# h( }. k S1 v .release = led_dev_release,
; P* L) t* X5 c6 [ }$ O' Y5 C D& r: d
};
: a! k+ e _$ b/ l/ Z$ m5 F4 e
& x& ^+ T% K v+ r, [ _- [) Z0 ~static int __init led_platform_init(void); e( V2 V: q/ a) l% s/ d- c
{
2 F: {0 l+ Y6 P( r( R+ l h7 C9 f6 M int ret;
$ d( e) x H0 a0 ]3 \. x" H. ]#if 0& B% m, s: z) ?4 x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& @& l$ ?, ~$ E$ Y+ w% y if (ret)7 E n& t- O: S( F9 ^2 j( z& f6 A7 m# C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 @& s( w& Z8 S5 D1 l$ h0 k4 d "%d\n", ret);3 K* S8 `/ A- {. T9 p6 _7 n6 f
#endif+ b0 ^8 [9 z# B* A9 g
ret = platform_device_register(&da850_evm_tl_leds_device);4 \! _8 N# q5 a4 E1 K0 ^0 `
if (ret)( ]& v# A1 ?5 D, c# _4 \. `
pr_warning("Could not register som GPIO expander LEDS");5 P# n% M+ J* \) F! v0 m
else
7 ~4 I8 v2 A1 T! m) T$ w printk(KERN_INFO "LED register sucessful!\n");0 F( f0 ^* U: n% }4 m% B
7 S6 S. G- v r8 @- K, N
return ret;& x `7 T1 q# X6 _/ d2 Z0 f! O
}* ~. f s' ?! f9 c$ U: p& w
- e$ g9 p) \3 S1 L7 A) O1 W- j/ Wstatic void __exit led_platform_exit(void)
; F0 F: _- H1 B{/ P8 L! V; v5 ?8 N
platform_device_unregister(&da850_evm_tl_leds_device);; T& `1 D- G/ y/ a9 S
5 ^* s( b9 ]2 Z/ H/ r( T
printk(KERN_INFO "LED unregister!\n");: k) Z1 ]/ b% A5 ~4 T
}
3 c5 r5 p6 R( @3 V- @
0 G& {% q& O3 K/ X7 \3 t" Y( jmodule_init(led_platform_init);
2 g r/ \: ?4 U; imodule_exit(led_platform_exit);% J3 @% Y$ v" X4 _ c/ w
* `+ k, m8 r9 `; {
MODULE_DESCRIPTION("Led platform driver");# ^, f/ D- G- ?
MODULE_AUTHOR("Tronlong");
" L9 H! b* j. l0 @MODULE_LICENSE("GPL");2 F# O; x. a0 i+ m, }
C! A( a: g: m
|
|