|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- q( H( z. l) f# I8 F# T
#include <linux/init.h>' o' H/ K1 i; S+ L
#include <linux/module.h>
+ r2 Z. g$ x- p+ v! ]#include <linux/kernel.h>" r, S1 S1 J8 |% t- b+ a. n
#include <linux/types.h>( X8 G$ v$ I+ ?+ u
#include <linux/gpio.h>0 H/ `8 ~8 Q. `' m ^
#include <linux/leds.h>
4 {) e |. L' J#include <linux/platform_device.h>
/ }8 c) y# i4 C4 S1 C) H! r8 Z) U7 M! l6 B5 U; u
#include <asm/mach-types.h>4 e5 x7 r0 f1 u5 S
#include <asm/mach/arch.h>
# ?; b. _5 \, E! I; b T#include <mach/da8xx.h>( u3 u! T' ?- b" l
#include <mach/mux.h>( k+ D, Q1 @4 n& u0 X- \. S
( l I# r! G& _0 I; t4 J- W7 X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
~2 h, V. [0 E+ Z3 \# Y' r#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' Y" Q- v/ n( j4 s1 y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 j: b, A# O( W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 h8 m/ {8 r! P k) ]2 n: A* ]) P) g. r; E$ T
/* assign the tl som board LED-GPIOs*/# d# y0 ~3 `; N- m
static const short da850_evm_tl_user_led_pins[] = {! ~( v6 T8 k4 \2 J6 k. `. I4 J1 _
/* These pins are definition at <mach/mux.h> file */
+ e; Z# t* n; V4 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; N3 F% d2 |' J& ] H -1- E5 F2 a1 u' F: r+ m' F
};
* ]& o6 L- N4 Z. V8 Y Y. i5 S( l. R8 T0 g
static struct gpio_led da850_evm_tl_leds[] = {
5 r h; j) o: A( z0 N5 s {
- b8 ] {' b" E& {$ n8 V0 a .active_low = 0,7 |" v8 K* x7 R* h2 t- H0 N. }% f
.gpio = DA850_USER_LED0,! Z4 x: `+ h( o
.name = "user_led0",. Q1 A. w: `" I, Q2 L0 I
.default_trigger = "default-on",$ O! ~9 I. `4 }* ~. {% R/ V6 I
},& R6 x5 b) ]9 ]# U6 U& x) R0 E1 O' G
{* d7 w$ K0 J( _" b2 A+ d: A
.active_low = 0,1 Y/ A8 x T/ z
.gpio = DA850_USER_LED1,
3 x: Z6 f& E V+ j) r4 x6 K+ y .name = "user_led1",
/ [$ H) H; v% A) M .default_trigger = "default-on",
2 h p% q& `6 b; k9 m) d' h },3 c; u) l! h: {+ n8 D6 b
{
, E i3 a6 K, W& }- } .active_low = 0,
) W A0 M, E; P* @" A+ _ .gpio = DA850_USER_LED2,
7 k5 |' T$ e/ u$ l' R1 g( t# H, W .name = "user_led2",4 B$ H* d" ], U
.default_trigger = "default-on",2 f9 n. H1 r3 j* f
},2 ?& O9 w8 r, ?1 x0 M
{
3 L$ g$ L2 M! L& P& P3 f .active_low = 0,, K" W8 F; t, O" M& D+ u
.gpio = DA850_USER_LED3, R" u! r+ ~6 ^' Z8 o e
.name = "user_led3",5 O" h( w, X& o/ [) q9 C
.default_trigger = "default-on",% s( s' R) l; `" K
},
" F9 U2 z9 k# N! q6 A};! M8 U: m' u1 U) m+ ?% r) `
* L# `4 _! W3 C2 b" @' ?( v8 s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- }, k6 L% A) F' I K .leds = da850_evm_tl_leds,; }8 H" m Y; s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 }% h0 e9 p" S1 |% D( J/ f
};: B# M* X* M7 l5 {2 B
# \" z8 p" K0 x$ pstatic void led_dev_release(struct device *dev)
) E: A$ V; m" _: U4 h{
9 o" K J1 h+ O};: ~8 H2 y+ X8 i6 P6 W2 j2 g
6 x9 P; s P n7 |3 k# ?. E) w$ X. [
static struct platform_device da850_evm_tl_leds_device = {& [7 e8 h+ r. S) f k, }# r6 \
.name = "leds-gpio",, @7 U7 i& M. ^6 o4 G3 @1 F3 Q5 E1 s
.id = 1,2 S# l$ R2 n _
.dev = {/ {9 y8 x. U5 I5 {! H, D
.platform_data = &da850_evm_tl_leds_pdata,
( Z# E( U# r; t. F5 Q .release = led_dev_release,
6 T3 |$ y, a y1 b) J2 @ }
- s* [4 N/ L, d" d};
, D: `* M" [1 _& {' r, S5 g* T+ ~/ E0 [, }- w
static int __init led_platform_init(void)" s9 @- @8 d7 i# e5 y" T7 O
{
* c8 x, K- b, U# Q4 g5 Z! y& \ int ret;8 y, j# b2 O8 u7 x+ o% G; B4 `
#if 0$ ]( i" J4 y3 I/ d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# X7 t0 r6 V0 q$ } if (ret)+ y. T1 ^- S/ |! {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 u) q# L6 O2 F3 \' d+ t1 c G "%d\n", ret);. P" s! k: b* w6 e2 R! j3 |6 @
#endif8 ?: W# J9 B$ n: T! L/ _
ret = platform_device_register(&da850_evm_tl_leds_device);2 T# L/ y5 S- B9 r/ s( }. ]
if (ret)- b# t8 Q7 X1 V+ ~ z ]* p0 C9 L
pr_warning("Could not register som GPIO expander LEDS");7 n5 y5 e; {' ]. K, g, V; u" |
else8 t* a/ C* L9 g2 v
printk(KERN_INFO "LED register sucessful!\n");
- \9 _ }3 }* k# Y) G
' ?9 E j2 f4 f' c return ret;
9 H! a* X$ M. q4 E8 j}) e- E. G$ |1 d7 R; |9 Y! @7 B
! B/ C8 }+ P0 U$ H1 jstatic void __exit led_platform_exit(void), G ?4 @2 i% U1 l- e% ]) p& i
{
- P" F ^ H; f1 z. N/ ? platform_device_unregister(&da850_evm_tl_leds_device);4 r+ h( n3 P$ X: j: i
* G4 x$ Y+ W" P3 j( T' i
printk(KERN_INFO "LED unregister!\n");/ i' z6 q6 P) X( L/ G& I0 N% [
}" S8 R7 M0 B8 h" n# y9 g; q) ^, l
1 d" |& s) ^3 p" R' u; S7 N. i
module_init(led_platform_init);
% @4 G* o# C4 mmodule_exit(led_platform_exit);
' x! |8 c/ I. p$ ^, N- ], I+ x6 e$ \# k3 \/ }5 C) Y- t- M
MODULE_DESCRIPTION("Led platform driver");
* \, r% B3 I' q* j/ s6 K" A$ x. xMODULE_AUTHOR("Tronlong");
5 A4 D0 u( S! h' ^6 ~MODULE_LICENSE("GPL");
+ {4 ~3 M+ b F1 j0 n) {! k
+ @7 b# K; a9 P2 C' Q |
|