|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& Y: p3 e$ p5 S#include <linux/init.h>
+ v' g' J' o) O; B#include <linux/module.h>6 M) c* J/ H/ e- ^2 \6 p1 g
#include <linux/kernel.h>* C2 S) C$ O7 k! }
#include <linux/types.h>
! u5 j9 l# @! p% N7 a#include <linux/gpio.h>
' q) W( P$ R! e#include <linux/leds.h>0 \: E5 ^1 C* {: D, q
#include <linux/platform_device.h>& _$ _8 E# e1 _" g5 ]8 ~
# g/ D3 Q* C4 n7 E" D+ t
#include <asm/mach-types.h>
, ?# N# g/ o5 R( w' x#include <asm/mach/arch.h>, u9 {8 P0 B9 s3 a
#include <mach/da8xx.h>
; k4 E3 U& q% k0 T$ h- S#include <mach/mux.h>+ M, c) u n/ I+ Y/ ?
( K1 U& x/ q# ~6 |" p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 u- K3 h+ Q) D: ?6 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( O4 b& ^& c3 ?+ ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! \$ r/ S/ |5 ]- x- J4 {: B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- G. B8 k, Y) Z7 Q G( N l& O( Z6 X
0 C8 y% W3 N0 |
/* assign the tl som board LED-GPIOs*/
& P( o3 P2 I' ?" D, @: u5 nstatic const short da850_evm_tl_user_led_pins[] = {
2 y) ?( I% c6 @ U- U/ { l /* These pins are definition at <mach/mux.h> file */# z$ X8 p/ ^/ N( s) w1 I% \4 D5 u9 |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% B" B; d0 B1 @$ s8 D" S
-1
4 D' [& ?2 b- _! M: ~5 ~; O};
" q4 S3 T& i- p, H/ Q' l# m( ^2 u5 k8 X; y
static struct gpio_led da850_evm_tl_leds[] = {) t$ T2 V; `5 ~ u* S$ Q) C0 T
{1 C" D: m3 c& V' K
.active_low = 0,; @1 r$ Z& h: g+ T
.gpio = DA850_USER_LED0,
: }$ O, g& k# f) k" O H .name = "user_led0"," ?6 S) l# @5 @( ?5 U) l
.default_trigger = "default-on",; k7 [- x1 [( G( ~
},
8 I& [% Y7 F. J. z {# V" `3 q/ q9 Q0 u+ J4 ?
.active_low = 0,7 {- @! O# w3 i$ N; A( o
.gpio = DA850_USER_LED1,$ r; E, r) B1 S6 C8 a
.name = "user_led1",
2 e" S, Q& w4 I5 z4 Q" _ .default_trigger = "default-on",( q9 Z( `$ m7 d( N
},5 [' q# L8 x1 L; d+ M% c
{1 Y* x) t9 T. E+ H9 B% N% M
.active_low = 0,
, f; y, |# @, e# U: C% C+ x .gpio = DA850_USER_LED2,
0 y# P4 b( s% E# h) d, b* B6 l0 H .name = "user_led2",
+ j, Q2 \( \3 g& ?; H .default_trigger = "default-on",
. j1 _$ s' |0 \$ T# R; ?! U },9 j( y/ m0 C! o
{
3 e* B4 m, h, b1 Q5 f; r* C5 q* f .active_low = 0,& K7 G: p! {' K# e
.gpio = DA850_USER_LED3,
: c* _3 I' O1 y' I .name = "user_led3",
3 @) f- i: x- Z .default_trigger = "default-on",
+ |' w2 a, v% T/ F( |6 `5 _ },3 \. d8 U" C) n0 Z& K0 c" i3 U
};
; u3 V0 p' u( i+ @! }
; V) K( M5 l4 p& @4 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; h' ?, b2 b1 N I" r# [/ u
.leds = da850_evm_tl_leds,2 f: F5 g8 B! D$ u$ P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ m0 }& n7 S) B1 i, ?3 k};4 M+ @- b7 k" Q* D/ _# d" E
0 {0 [9 @ ^2 F$ O) r$ c. h
static void led_dev_release(struct device *dev)
/ f- W1 u( \1 K{9 W" E# [" M8 O0 V, o- Y; M
};
7 ^, |% X1 I ]: {" W0 o, {7 n2 P7 ^& G0 p( S
static struct platform_device da850_evm_tl_leds_device = {
8 B7 [$ _. `- v .name = "leds-gpio",5 [$ O8 {: p. R9 m4 f
.id = 1,6 x8 D @5 m1 ~ t! q Q
.dev = {3 m9 q' g6 o1 i# {3 p; f
.platform_data = &da850_evm_tl_leds_pdata,
! m8 v/ u+ \' \) s .release = led_dev_release,
% [2 ?) X) O3 A }3 D" g$ p! N- d# X4 t+ f
};
& ?" n- e6 m6 G; n% z0 e6 m* g
1 C2 v4 z8 `! n2 P& V; mstatic int __init led_platform_init(void)
- @; ~% k$ U& w2 @# z{
& `1 ^( t0 j( D+ u# v int ret;
8 o& q% ^0 `! @' i3 y1 Y. b#if 0
7 P% R O. }. i% g7 h3 { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; L9 c" F7 d7 ]$ P" C* }" J8 f if (ret)
) \4 p& z; P! f: q, q ]6 N0 E3 ~) H, B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 _9 T' w$ {7 l "%d\n", ret);
% `( x9 _# D! e0 O. [1 L: i#endif- i" t. y/ D# W5 P! v3 g
ret = platform_device_register(&da850_evm_tl_leds_device);6 [+ J% B) l- r3 `
if (ret)
9 ~0 t9 \. b, C( Q5 O pr_warning("Could not register som GPIO expander LEDS");
u# N" N4 @1 ?# {. i else
8 k/ ?7 G+ r/ Z4 {8 X& b printk(KERN_INFO "LED register sucessful!\n");
1 J/ t$ G* H. b8 q. U. B3 Y3 E! w( Z% q' E4 E. C
return ret;) m+ [3 V& \9 Y# d! C
}+ A$ {' H: b- }/ g
! l# F; P( J( M7 o- a% tstatic void __exit led_platform_exit(void)/ G( I# P8 C6 `' r1 T+ X
{
4 t! ~6 ^2 |# T- l& e4 H platform_device_unregister(&da850_evm_tl_leds_device);
5 | w; i) J S) I$ `7 E. P1 p/ Y- o+ p% I- N- n
printk(KERN_INFO "LED unregister!\n");- A" d' j/ ]" _- s# c5 g
}
: G# b v$ C2 r# I4 p3 ]1 j5 L- ]5 Q/ ?9 N( x9 H
module_init(led_platform_init);
6 m+ b$ C8 O) I/ k( X$ o) nmodule_exit(led_platform_exit); b( @6 j. X9 h& c0 ~
( U' J: Q4 |8 K
MODULE_DESCRIPTION("Led platform driver");
; G& W+ ?& V( E1 \& EMODULE_AUTHOR("Tronlong");8 n6 T2 w8 q/ y6 S9 e3 w
MODULE_LICENSE("GPL");4 O8 \% w4 @$ y5 Z. J) U3 R$ m2 a
5 ~4 `8 F2 e- `6 S
|
|