|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 n8 o# y! Z# v- t% M; D% [% u
#include <linux/init.h>4 [. t8 t$ w+ |
#include <linux/module.h>3 M: x( R" b L, v
#include <linux/kernel.h>+ z: Y/ `: g! _7 e% M
#include <linux/types.h>
+ r2 [& H/ c/ j: h5 x1 E" ~#include <linux/gpio.h>+ l! y$ K- C3 Y! Y9 J- F& {& j
#include <linux/leds.h>
* Z( g$ H+ {: m5 v9 u# S+ Q( l#include <linux/platform_device.h>7 F& ^, F/ C# M" Z
( P; h" a5 }9 R# D#include <asm/mach-types.h>
. K* {. ?- z1 s#include <asm/mach/arch.h>
}% Y8 K8 ]$ s; d. G. l$ m6 ~#include <mach/da8xx.h>
7 v9 `, R% y' V0 n3 D#include <mach/mux.h>
! ?' @' j2 o/ @6 Q# |9 Y! F
* J5 W/ I8 R3 b8 ?/ r' t2 T# U/ s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ ?/ R3 H% Y n; |* U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* c* G( C9 D) _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! y X1 L, Q6 U# {3 g3 f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* t- u! X# l3 ~ v; x- D3 ~5 L* O
" D# d& S$ z. ^3 u% S2 S$ i/* assign the tl som board LED-GPIOs*/
) _) i) Y& Q) E# L! s/ cstatic const short da850_evm_tl_user_led_pins[] = {( d9 \0 g N3 `- T5 `) e- a/ ]
/* These pins are definition at <mach/mux.h> file */: Y7 `; l0 q0 l+ Q, Y2 x3 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ c0 w( j8 z2 s0 T9 t -1 n' m0 w+ ^ L
};
; J& K" s7 @( I9 t$ g
1 M& [7 n& P, O9 V( \9 Y: Tstatic struct gpio_led da850_evm_tl_leds[] = {/ e: _( I5 z- J/ `' ?8 g1 e0 W: n
{8 x* Z$ q9 R# c0 u! T0 F: h
.active_low = 0,
% }; M$ Y# ?$ Y4 M0 b3 w, K .gpio = DA850_USER_LED0,( X S3 s: f9 L
.name = "user_led0",& u% Z6 w# ]' W ^$ d
.default_trigger = "default-on",
# y7 D' S' k/ H2 R0 U },; i) b' Q7 q$ u% d. k
{. A/ ?; R Z; u5 |6 g
.active_low = 0,0 z' q8 E- M% Q# k% ]4 v
.gpio = DA850_USER_LED1,
, M2 Y+ p/ N3 ]: k. Z .name = "user_led1",
3 P" [6 B' B. Q! |# O% u/ t .default_trigger = "default-on",
6 {) c" q$ W2 g7 V" o! \ },
, W- B4 C7 {" a6 E {3 n" b& [- \7 c, U8 Y& E& A& v& o
.active_low = 0,+ S9 ^2 o& B/ }- q5 K* R) }
.gpio = DA850_USER_LED2,5 T3 J8 Z8 a% {0 @) y- |: @
.name = "user_led2",. q$ v8 B+ z- w* [/ b. A- q* E
.default_trigger = "default-on",
: u% [& K& Q5 ?4 W- g" p },; L' \; t' D, p
{9 ]# I6 a0 L- {- W; E5 U% T7 S- n
.active_low = 0,
5 a) b, L+ j8 b6 p8 I .gpio = DA850_USER_LED3,+ O5 L# R8 Y7 y u
.name = "user_led3",
4 P, F$ w L% w+ [' C .default_trigger = "default-on",
; c0 [& m/ O7 g! h" T; B, q, g },$ J A! z& I ]# L& B
};
) y; f1 k5 T0 c9 ~, W Y" v# @1 u( U' M. E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 C5 w1 w3 R9 h
.leds = da850_evm_tl_leds,
* h& G: B. g0 s' m2 f& @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ r5 W: e3 e1 `};
4 W7 M7 `8 f0 V6 Z# m1 k Q. R' S: @
static void led_dev_release(struct device *dev)
3 D1 X+ b+ Q) Z: G0 [0 |% N* i{
; e7 s# N- t" _( D, W};! k/ G' h- w/ v3 C# Q8 y$ h
4 z, `" B: d* m# e4 Q- d
static struct platform_device da850_evm_tl_leds_device = {: g% R, J; B7 j! b/ B! f
.name = "leds-gpio",: `7 @# h% [1 { j9 g
.id = 1,
7 \! J1 F. l0 w .dev = {8 d( B# ]# o: e( g" L; e, `
.platform_data = &da850_evm_tl_leds_pdata,
. k3 C1 G) o; K$ I .release = led_dev_release,4 E5 w( Z9 s9 y: b
}2 u* Q: J$ K C* b" i( m! B3 U
};0 B% F* ?2 \" Z' N0 i
8 V( z$ h2 C1 J" L, m( \2 ~static int __init led_platform_init(void)
0 \0 p6 P/ v; k6 I" p1 d: ~ |$ n{
8 z$ r" J0 L1 t- p" V" ~# g int ret;
5 z( S- R8 A1 Y& s" C#if 0! C. r' b' r7 T/ Y+ G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' C5 p9 X( J3 R: ~! v+ z( ~( p& O if (ret)
3 q8 r# V6 Q3 s0 u2 x, r0 U; ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 C" V1 K* i( ~+ U "%d\n", ret);
! V% v; r: {2 @& E: }6 h! }#endif
6 T2 c D* @& A ret = platform_device_register(&da850_evm_tl_leds_device);. k$ l: Z/ y9 _# _# \
if (ret)
7 A8 e+ I7 G$ a$ ~& L- h2 S, x- { pr_warning("Could not register som GPIO expander LEDS");, ^( N/ k2 c. b2 z7 O
else
7 k: Y# U5 P4 P: b; H printk(KERN_INFO "LED register sucessful!\n");
9 k5 w2 I6 N: d8 c5 \0 h, d( N5 S" k# D, {! ~! b2 S
return ret;
- T+ i! {1 N/ W% V}
5 G# y0 M# z; M# r; g5 i
% J0 F8 N* a# p( xstatic void __exit led_platform_exit(void); r) J+ G* E; }7 i5 \
{
$ k1 @: P: I7 g platform_device_unregister(&da850_evm_tl_leds_device);0 h" u, Z5 [6 T8 }7 X
- `3 h6 O2 R6 N" o printk(KERN_INFO "LED unregister!\n");
3 X3 H4 ~# r& e}" _5 C5 h% _- z( z
/ ~, F) s- \( S3 r% O$ A# o
module_init(led_platform_init);3 Y6 Q/ {# H; q' W
module_exit(led_platform_exit);
' s9 q G* v& f# c$ ?5 x# f) Q+ ?% H! ?7 K& q Z' P
MODULE_DESCRIPTION("Led platform driver");. R7 _# f/ `& y* x1 X3 x/ U
MODULE_AUTHOR("Tronlong");
, L! G W' }9 u0 L; C0 a/ oMODULE_LICENSE("GPL");0 x: g5 q1 z5 A! c: b. {
/ l, ?' A, X5 Y3 f$ n
|
|