|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" K D3 B: U* i5 B @ B& G) l- x
#include <linux/init.h>. D3 J. Q5 i$ P6 T0 n7 u
#include <linux/module.h>
2 p8 t. J( z. D, V* F# V V6 k#include <linux/kernel.h>% S; m2 e0 W _- Z- j
#include <linux/types.h>
- v Y# L8 C3 h4 {" T#include <linux/gpio.h>
; v( I$ |9 V& V7 \1 u0 Q r#include <linux/leds.h>8 {0 v" W" @- T$ t/ s
#include <linux/platform_device.h>
$ Q% L$ {+ _( `1 D, o; A, I x3 ]% n" n& e; J
#include <asm/mach-types.h>
5 I( f7 u9 `$ v* M+ n5 D, G/ ^( Y* M#include <asm/mach/arch.h>3 h( b5 Q" F, L0 c$ y
#include <mach/da8xx.h>
5 c5 C2 ]0 y% J8 e#include <mach/mux.h>
4 I6 r% g4 r. C M# D. v
( z1 b' @8 D0 i* A" Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 |4 Z2 b% o) o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 h. |8 |4 a0 F' ?1 s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
a1 l. W9 ^0 h1 O* u% \8 P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) g' a7 g S0 h' Y
3 n. ]1 M- y, q' _- F/* assign the tl som board LED-GPIOs*/
/ k# b$ c' M! t- A) wstatic const short da850_evm_tl_user_led_pins[] = {
0 _! ~. U" v+ W& g) b& y /* These pins are definition at <mach/mux.h> file */
7 {$ {8 ~/ m! F- P2 y9 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 g/ s+ I5 Z* P9 y" ?* t8 a% \
-1% r3 g: h0 \+ t; h6 O3 L' _
};
& C3 ^7 S& q6 T! Y
4 V! c$ S5 ^% k% u8 istatic struct gpio_led da850_evm_tl_leds[] = {
% P8 ~$ M7 V' Z! W5 j$ ?- `9 M {
( j' X' q1 o, ]$ p, ^) { R0 A$ b: \ .active_low = 0,4 ^* J) z$ H( s) X9 D
.gpio = DA850_USER_LED0,8 `1 p' d' j& P0 o( J, e
.name = "user_led0"," P- U: p; J0 \* p" Y* I
.default_trigger = "default-on",: n' P! g3 H" H5 [- r5 K3 L( T% Q
},- `; M* c% i2 V8 P; b
{# c- u* n! l6 D! ]3 R' t6 S, h
.active_low = 0,' Y3 Q: L. c7 o" F9 u* i6 p
.gpio = DA850_USER_LED1,
3 y- t% ]# q4 b6 z .name = "user_led1",
/ I% I$ K2 H, R .default_trigger = "default-on",
( x- G- h* m, m9 H$ i },
U9 Z7 c1 X; H {
' ~. m% ^# U* b .active_low = 0,: B" R' m4 }8 S5 E/ E) D8 Q: d
.gpio = DA850_USER_LED2,
# |" t8 b: _% m9 K .name = "user_led2",
1 C2 t" y2 ]/ K% d2 R3 D2 K" g .default_trigger = "default-on",
! K& n3 I! N4 y' N4 u( _& W2 g },
8 l' K7 i9 @* p& J9 Z4 O {0 F$ [4 f5 r+ n* k' Z8 ~
.active_low = 0,1 n/ H" v0 U+ O' v# n b; \9 r
.gpio = DA850_USER_LED3,* c3 H O1 P3 F0 P# i
.name = "user_led3",
. \; ]0 ~0 M* h4 I( z$ T .default_trigger = "default-on",3 Z: f5 b2 \9 C) i: z/ X
},
V0 o) F2 f4 l! B3 V! {};
6 m$ L! F5 L% z9 i. q4 j5 |; [$ H9 G+ H- l7 T: Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { s5 _+ I, f8 c% n4 l+ J. ~; ]
.leds = da850_evm_tl_leds,
+ x( D, |: Q5 f& Z8 m' K1 ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' @ Y1 H8 M, o+ ^( q};
9 p4 |' ]7 I% C) \+ }
% L6 L' n- }, Q( D4 T3 kstatic void led_dev_release(struct device *dev) v! I3 i- r( o# k; L) d
{ h1 _5 K+ u. h# u3 w7 K' A/ E! ?
};7 k1 k8 P8 i+ v; Y; Y. D( ~
* \) P; F' a9 W3 \& tstatic struct platform_device da850_evm_tl_leds_device = {& ?# E, _" x4 a1 L6 h6 k1 Q
.name = "leds-gpio",
, Z4 j& i' ]( [& R .id = 1,
2 c2 _7 C5 `# ~ S .dev = {* [; m; A8 d ^4 g" x* ?7 U( {7 m
.platform_data = &da850_evm_tl_leds_pdata,4 c$ u4 E4 }. V% C
.release = led_dev_release,
# ]2 |! K }$ Z7 }- v4 ~! z }
% j+ T5 t1 T; S6 A6 R" {};0 X: }8 r$ q" f/ q
, a) V5 \: x/ B4 _5 U* D% O: z! H
static int __init led_platform_init(void)6 j/ u# M8 }$ t2 d
{; l" i4 E% J& @3 c0 U& d2 M
int ret;
1 C# f( @9 G% R0 ~#if 0
" [/ A& {# t5 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 T2 X$ U' _0 k s3 C$ H
if (ret): t- e8 Z0 q: G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! e- j1 B5 R7 a( a+ q5 k
"%d\n", ret);4 J e4 j8 X* A; L. Z# p# [
#endif
: S4 K7 z# n, Y) w5 s2 m5 m ret = platform_device_register(&da850_evm_tl_leds_device);8 f+ s' i* C5 f- N' {2 m% a
if (ret)
6 C& s# s# j) t3 p( `4 E/ k ~7 G5 ` pr_warning("Could not register som GPIO expander LEDS");+ Z8 q* V4 w- r* C* D
else
: b# a3 Y! A- H6 g printk(KERN_INFO "LED register sucessful!\n");2 Z" ^- J6 Y9 b+ T
) v4 K! d3 m: U) }2 |0 h6 ] return ret;) Z5 U E0 I$ s* R) Y8 I5 @
}
8 `) x( L* ?2 w+ ~3 V9 q5 J ~3 A& l! s" x4 t1 w
static void __exit led_platform_exit(void)1 z, X' z2 b/ M7 \4 m+ N. R) p1 R
{
/ x- n4 M7 P' f9 D platform_device_unregister(&da850_evm_tl_leds_device);5 K z2 ]7 c- c9 E. H
/ l! e* g g5 o& M0 }- l printk(KERN_INFO "LED unregister!\n");+ B1 C3 |/ ?: B/ h( h
}8 {+ [4 t6 n L" l8 b* B
6 t3 C$ F4 Y. w9 H- Q" Q
module_init(led_platform_init);
4 K3 ~1 P! a3 U( H" Nmodule_exit(led_platform_exit);
! f7 J2 I2 X V% s; L* N0 z! S& C' @6 n W# q
MODULE_DESCRIPTION("Led platform driver");7 }) A) J( y7 L+ x2 h. N2 J
MODULE_AUTHOR("Tronlong");
, D0 @) ?9 t: [ [" w1 yMODULE_LICENSE("GPL");- ^$ B* ]# n) @
# [) U. |$ p, C6 A
|
|