|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# s3 D8 Z' s) `4 i3 u/ C c6 Q#include <linux/init.h>
3 q3 m3 G% ~* h: ]#include <linux/module.h>* S+ M" j- I- k
#include <linux/kernel.h>* r( J9 l5 E" R) A
#include <linux/types.h>1 `4 r5 Q+ \% l H. a) L4 I
#include <linux/gpio.h>7 l( w# j, R' P# K
#include <linux/leds.h>: W: Y& d& v" Z* P# h
#include <linux/platform_device.h>
1 a( C5 c" _; i5 T0 S' o& `3 n' X4 T" H8 @8 r& Q! g
#include <asm/mach-types.h>
6 u4 [9 V& d; M#include <asm/mach/arch.h>
: ~9 K o: p' ^' Q- E#include <mach/da8xx.h>
( K) L/ b4 \9 J: l: e- w#include <mach/mux.h>5 d" M& L7 j9 U9 v+ {
# [7 m3 b; S* L" `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 p, b |6 k9 n7 A- H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 r U, I- w* ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 }9 e5 p. s5 [, d8 g7 F# Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 l7 P" h' |4 z0 Y5 E. @
% z& |4 b& g; ~) S% G) g1 \8 E A3 i! N
/* assign the tl som board LED-GPIOs*/
5 B. { k: S, G& ystatic const short da850_evm_tl_user_led_pins[] = {2 ~4 i. f) o' v# x& b6 Q! }% L
/* These pins are definition at <mach/mux.h> file */
" W+ h5 ^5 i2 D' u. x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ B8 ~3 D8 }* ~/ T+ b -1) b) j4 C( a/ c( `/ l# u( {
};
' x' B2 s% O2 d$ B; }) D! O% z& k5 O/ T0 D( y
static struct gpio_led da850_evm_tl_leds[] = { e+ n4 I) ~1 e! ^2 t
{, R {3 ?9 b# K. ~+ |, d: n
.active_low = 0,# F' ]6 G ^' }" `) C* }. a
.gpio = DA850_USER_LED0,
4 E! q1 x; k6 |$ g* i .name = "user_led0",/ N0 l& K/ y+ f# Z* ]$ i6 o( Z! O
.default_trigger = "default-on",
! B9 H. Y/ P# }+ m8 B% d. K },
0 L2 H0 d: |8 y0 G8 U {# \4 Z3 R* a7 i- a
.active_low = 0,: s# a! K0 [ |$ A6 g& m
.gpio = DA850_USER_LED1,
; v3 @1 Y1 }6 P f+ r .name = "user_led1",. T$ c3 ]) G8 ^ t
.default_trigger = "default-on",
; Z! c( _/ O5 P9 B },
0 I0 R7 V- I& d {( a5 t2 _. a6 T3 v: h
.active_low = 0,0 M, h7 [; Q; O& h- S, J5 O
.gpio = DA850_USER_LED2,% F( _5 o- ^1 {, x4 j6 m
.name = "user_led2",
# M; r" l, y, j2 ~9 Z- d .default_trigger = "default-on",' o' a7 q# ^6 n) ]2 O" O
},5 J \; r. J: k, y, k9 B
{
* P, Y0 p& I- E7 y8 H .active_low = 0,
+ X F7 Q- R5 ?( b .gpio = DA850_USER_LED3,
b a8 k. Z& {/ V1 H9 m .name = "user_led3",
/ ~3 u7 J& o9 q- |" o" L2 p .default_trigger = "default-on",
- z* ~* f" ` S( x: e+ | },
% p! N' i6 M1 f0 y- ?$ v% R+ a};
, Y$ g: n' F+ w: _( r
: \" O2 K5 P+ U' x2 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ O: R" p' Q. w+ b6 ~( K
.leds = da850_evm_tl_leds,
- l. g& _- ~& |& j @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# V1 p u6 W1 p$ r};
! w4 f7 u8 q4 v% Q+ o5 X; |$ i4 E. z* D5 D. ^
static void led_dev_release(struct device *dev)
$ d% @) I$ c$ D; Y% J5 Z/ ?6 I{
1 o6 X) X+ L( U: r2 Q4 a};
2 d* g( R% U7 g5 ?6 V1 u8 K0 R; p& h5 @
static struct platform_device da850_evm_tl_leds_device = {" V2 V, Z- ?2 g/ p0 v8 V
.name = "leds-gpio",% @! x3 K3 _* R7 y! o( r* b
.id = 1,
: {( S: P4 K' i .dev = { J; i9 |7 ~, R( k0 T
.platform_data = &da850_evm_tl_leds_pdata,$ n9 z% T/ c3 P. S* [1 [9 K
.release = led_dev_release,0 k" M* @$ c5 k1 p" Y1 `9 z
}
! l6 \; g6 a/ c8 l( @};
: w/ _, h, V7 B# u8 p1 a5 o' S4 h0 e3 }" v5 R8 r( l# P& }" ]# Q
static int __init led_platform_init(void)4 h4 ?. O, d' n* t, R t' G
{
. _+ O- `' I* M4 S2 l$ f( ^ int ret;
, i( j! g+ K- {1 ^; Q& F/ a. o+ c#if 02 F- N5 d/ {- G$ l+ o" B. f T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 v9 V" b2 y5 |3 o if (ret)
* S9 ~9 H* z$ O$ ]6 @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 _) @. G: F' f# U% _1 \, R "%d\n", ret);; W9 ~1 d8 X* y2 R1 l' H/ U
#endif( {1 U9 L q% d) z
ret = platform_device_register(&da850_evm_tl_leds_device);8 q- ?3 y T5 v f5 i; j& F
if (ret)
" D# s* n$ x4 H pr_warning("Could not register som GPIO expander LEDS");' R e1 }* Q2 l: [
else
- _- L* d' P# ^& d! g printk(KERN_INFO "LED register sucessful!\n");$ p# t- r" ?6 P1 R* c+ Z
# E, N4 v% b) P$ r# r1 r' ^ return ret;
" k8 h9 j+ K j8 A1 X- H8 R}. |7 \& R3 H( P/ i f: k8 T
; o% A$ [! @$ Q1 [3 ]' Y7 @; ustatic void __exit led_platform_exit(void); ?4 C! b8 c9 H" p- l" z( w9 t$ P
{' J; T5 X8 _: W+ D1 i
platform_device_unregister(&da850_evm_tl_leds_device);
2 N; V3 _ o# Y: S: G$ }% F d' s- B& k9 d9 r8 d
printk(KERN_INFO "LED unregister!\n");- B! B, Q2 R" A. U; A6 P: U8 [
}
- W& C: j# v& P& \0 H: {2 O: g O- f( H, d1 p: U V
module_init(led_platform_init);
. L' l4 m1 F( Wmodule_exit(led_platform_exit);
" y6 K& V/ Y$ U0 n+ i' v' T8 e( t1 o$ c0 Z5 K
MODULE_DESCRIPTION("Led platform driver");6 @+ B" S J) d! j& r/ v) {
MODULE_AUTHOR("Tronlong");
) W' a; f2 N) y/ r j$ B" ]MODULE_LICENSE("GPL");
- F8 L9 M0 J6 u' \0 c1 \
- M5 `* h% Q; k/ l* H5 `2 W+ r |
|