|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! f* Q! P$ x r* b8 ^
#include <linux/init.h> F1 ~8 A P/ u, K3 }
#include <linux/module.h>
6 r* Z& J' A% l4 F; x1 t#include <linux/kernel.h>
9 X5 @! w% G0 b* U2 K9 L: a C#include <linux/types.h>
h- U/ V1 _; o3 s#include <linux/gpio.h>
& n3 q2 ?' U. Y* l#include <linux/leds.h>
5 o. A7 {' I1 u1 q% D1 S#include <linux/platform_device.h>
8 j) @2 } O' p6 h! S2 u' o8 f- w, V9 S8 r( b8 V" K
#include <asm/mach-types.h>: N) Z6 v: ^# [0 r3 D5 K1 C8 k
#include <asm/mach/arch.h>
/ K6 e# G+ R, M+ x+ H5 M4 c; Z1 b#include <mach/da8xx.h>
1 D7 n; f# r) J; L0 ^8 ^#include <mach/mux.h> ?" w4 j3 V* W
* L3 @3 Z- H& u* {& q5 ~/ L$ c) e) A( h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 q+ u! E, ~- Q$ F: @* v3 _- ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 n4 S6 I, T, r) ]+ D5 P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 o2 s# |5 I+ ^5 b0 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ U) P8 `4 n4 H$ t
0 U, m A& j8 G! t0 B! i
/* assign the tl som board LED-GPIOs*/" B3 z2 @/ M. M5 ^
static const short da850_evm_tl_user_led_pins[] = {+ x7 n6 Q$ r$ _0 V) H( _* F
/* These pins are definition at <mach/mux.h> file */) h6 o. K) b* ]5 }; q( }7 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 o! ^8 F w% A6 ~4 u
-1( l* ^2 r( k4 U$ t9 z9 m
};
) M7 F" Y, A! e, I% \& M: I0 u8 P: n" m) D
static struct gpio_led da850_evm_tl_leds[] = {+ `$ o% k# m1 |( D1 b5 I
{
3 }8 r$ [( ]+ y. U3 E+ A9 b4 H u .active_low = 0,7 j' w) h% e( \' w0 C, b
.gpio = DA850_USER_LED0," S! Y- h0 R+ b, k, ^! e( x
.name = "user_led0",
6 g; m, g5 ]0 h: o( @+ G .default_trigger = "default-on",
* l- c) S% M3 J, l% v5 X# c },( N) l6 Y6 ?& \6 u: b
{ ?3 \8 s$ m4 j% S, j
.active_low = 0," s" y5 C; Z3 |- M: P$ h
.gpio = DA850_USER_LED1,
3 B$ `& p8 ?1 k2 v .name = "user_led1",8 [$ A# m! D4 L. Z. t) v; v
.default_trigger = "default-on", @' |, s( s* Y
},
8 P# i; x+ D6 @ {
0 a9 A3 ?8 R" h" f+ w; ]3 S+ T .active_low = 0,
+ ~! k& m6 m/ x/ `, |/ |& q* [1 J: w .gpio = DA850_USER_LED2,
$ I N: D& O6 c0 O) W( r .name = "user_led2",
! [, a5 w, D( \$ k0 j8 u .default_trigger = "default-on",/ L% a& {$ S8 J; \ x3 [- s
},( h8 h K# O; v# {# V, H$ F
{$ I6 j B( \2 C4 A
.active_low = 0,
% i5 I8 D) ~1 C" I4 k9 U& r2 @- } S& A .gpio = DA850_USER_LED3,
+ G; c q5 u2 n- N' W6 v3 j .name = "user_led3",# W7 l5 |1 L/ [# ]
.default_trigger = "default-on",8 x# x- y @: c( q4 Y" Z* i2 `' P
},
2 y( }) g6 v+ K# W N};) S8 p( a9 P% ^7 D- G5 z
% L. P6 W" I9 i$ U4 l, [& Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& j* ^7 y5 L) Q3 d* B. r' P7 j
.leds = da850_evm_tl_leds,
7 f$ ^$ ^# q- O8 N6 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( A- Q: T5 U% ]) F: {. Q};6 N4 G v: o4 Z! r- m
( t' h$ N( l" J5 X, u1 ]static void led_dev_release(struct device *dev)
n* h2 ]' L1 Z4 O{
; G( T5 e8 K! O3 w, G2 y, |};
$ Q @8 C7 ~9 o# F3 K0 f+ b# x% }* C% f, b
static struct platform_device da850_evm_tl_leds_device = {
! \+ G7 r' `( m+ U: }3 S .name = "leds-gpio",
; p) \: ?2 T9 Y6 @# X% k" | .id = 1,7 q$ ]5 a& q( W3 w: h8 p
.dev = {
+ ^" d3 v8 K2 e9 ` .platform_data = &da850_evm_tl_leds_pdata,
9 H0 [$ g9 s; D: p5 Q .release = led_dev_release,
* G' B6 w& Q6 R2 A+ q( V2 ~4 y: u }; S' ]! @0 B; j# W
};
0 F6 ^* S- C' ?: g& K- z9 M" R4 _( V* j
static int __init led_platform_init(void)6 `; n" M' x4 `5 I% M6 R- b) ?$ ~
{8 Z8 r w* j% e# H" F' J
int ret;/ ^; d# ^* g" _
#if 0
) C( }9 F6 Y5 |7 i' Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 i+ \' I- b4 [ H
if (ret)
: b1 R& F1 Y t( v' ~+ [4 |7 a& J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 a/ ?9 |" k7 i5 L0 I8 _
"%d\n", ret);
# Z$ N9 s1 [ T# @$ g) C7 v- ~% j#endif
0 E# a* @! O+ x: v& {9 W ret = platform_device_register(&da850_evm_tl_leds_device);. a2 {" X: T4 Q1 B7 b
if (ret)7 \) V4 d- M$ h$ ` U
pr_warning("Could not register som GPIO expander LEDS");
& u$ E9 m+ B/ U; ^6 H# z0 e, W else
% E2 l9 J( l* A* `$ `6 z- c2 I! o5 N printk(KERN_INFO "LED register sucessful!\n");
; A# ^: Z! |9 m. i" G& R' V5 J: l, {' Y5 V8 \" z4 G; s0 B/ T
return ret;
. \ b8 `: S/ s }0 A}
$ Q3 ?: u1 i# I, o: D4 q# V, }' J1 A2 }. u
static void __exit led_platform_exit(void)
+ D$ C4 y) c5 M2 |9 G{
v: I6 p2 ~# N! \& J* v6 Y platform_device_unregister(&da850_evm_tl_leds_device);
$ _4 D# A/ J% ?) L" Y J) K) |# J# [( T, _4 N/ b) I
printk(KERN_INFO "LED unregister!\n");
H, h4 U7 V4 P1 ~; I6 }4 C9 `}
/ D% S) i" ]! X. K- A7 h. h5 W# Z7 k" ]" E$ ^
module_init(led_platform_init);! C2 {# Z e# C8 s, d$ i
module_exit(led_platform_exit);
) |5 D1 i0 p0 ?, [6 n" e; {3 m8 ]; N0 N5 y
MODULE_DESCRIPTION("Led platform driver");! i+ t) k9 ^2 K7 Q# Z" a( d
MODULE_AUTHOR("Tronlong");% m- K$ T0 p6 o2 I) A
MODULE_LICENSE("GPL");
0 \7 O1 g* f$ g4 ~) ?' e2 q
3 r3 i( i5 |7 W, A: _% r |
|