|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 z0 a Y7 r' {" |4 G#include <linux/init.h>4 W6 C0 m0 K7 r4 N7 z- o0 ]2 X
#include <linux/module.h>1 B" k: C h& N5 H
#include <linux/kernel.h>+ i9 j! _+ ]7 g0 x" x
#include <linux/types.h>/ _2 }# N3 y2 O
#include <linux/gpio.h>
# \% L5 l1 i1 w$ P5 G2 T& G#include <linux/leds.h>
& T; X, P9 s, i1 V; h+ }#include <linux/platform_device.h>: G3 e! I, P- t; ]. _+ w
, _+ B4 i& H5 q& @* t* \7 X2 n5 Y* @6 a
#include <asm/mach-types.h>
! X" h2 J$ N' J, q( O |8 G2 {#include <asm/mach/arch.h>- m- x6 ?' t7 R' p# H8 s: S* _
#include <mach/da8xx.h>9 E5 l0 h, I, \
#include <mach/mux.h>
8 H# O4 x: ~& }8 K7 [+ [9 f" O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& a7 V; K: {: M& ]3 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* B { q/ F; w2 E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# z6 ~5 d, W J7 Z& K! Q. ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, I1 F: Q# q3 \5 |7 u/ ~8 v! [; m! C9 r* L* t P/ \
/* assign the tl som board LED-GPIOs*/5 I% b$ T+ k7 v: l
static const short da850_evm_tl_user_led_pins[] = {
8 c* i) c& {( k9 B1 Y0 n /* These pins are definition at <mach/mux.h> file */
' P$ u. o( W( F0 b3 {& a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 V" v& Q6 A, |7 a1 q* F -1
' o2 H7 m) t8 y' S: g};
) v# h- @" ^* D" c3 X9 `2 X( @& m8 v5 M2 m3 A( A! g) I! G+ ^
static struct gpio_led da850_evm_tl_leds[] = {
* [3 [% b1 ^+ V( C$ Q {& R) P* I5 A* B0 L4 ^% U; k
.active_low = 0,$ ^/ D9 e; Z) B2 j6 P
.gpio = DA850_USER_LED0," V4 T0 i: x, ]7 t6 |0 { n* R
.name = "user_led0",
! a7 k1 C. p+ ^7 V, H6 ~# Y .default_trigger = "default-on",
; {. ], d# H- t },* s+ L% A9 |$ i! l U
{+ z9 w4 Y( J3 s" @0 |% e; S
.active_low = 0,
; g4 i! r+ W8 t; u .gpio = DA850_USER_LED1,
. ^- i8 y$ d' K( J .name = "user_led1",+ Z" v6 [$ Y. |$ [ `+ }- H
.default_trigger = "default-on",) F$ ?5 Y% Z0 e) R" P9 n9 ]6 ~
},
/ E# w: e' r7 { {4 W; X6 K( o; }! k+ D% O
.active_low = 0,
; r1 v* x8 Y1 f w- v .gpio = DA850_USER_LED2,( I W; m8 ^8 D `' e; H
.name = "user_led2",
$ X( w7 r+ Q+ X( e5 R/ ? .default_trigger = "default-on",3 a f$ w/ J& `) ?0 K/ |
},
8 O% e9 m9 G) a2 O9 S8 h$ A {
2 H' Q3 Q. ?/ m' i, F \$ g .active_low = 0,
* }# d- ~: O" ~: U8 Z .gpio = DA850_USER_LED3,
- r8 e- x, N5 g6 t. u* n" y) D .name = "user_led3",. m# `; a8 w9 i4 p" @
.default_trigger = "default-on",0 W: g A; o) h8 Y) w
},
# q# e/ Q3 E Q- W8 W! x0 \, I};
/ P# Q2 d6 y7 W* \4 O6 e# ~/ t3 |9 q; L. ]( V" D; p3 ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 b9 s: h0 H" P0 t .leds = da850_evm_tl_leds,
( y+ Z/ _% b; r$ X4 u+ t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. v& J& z0 A' B6 u5 Z- f7 G};! R n3 y6 R" K' t6 o- {! P2 i
" |6 L) Z) n. c7 x
static void led_dev_release(struct device *dev)
+ x3 w+ b6 d/ e5 k$ X: l{
. P$ ~! k4 N3 C$ E% i; e) l. w};
% ~8 v4 b0 p% i
+ o& S7 m; z3 Q: O7 M" q; nstatic struct platform_device da850_evm_tl_leds_device = {
2 _& _! O6 M5 |# A5 f% q y .name = "leds-gpio",
; l: g% F* G7 N! c' S; M .id = 1,3 T+ P* q2 p+ ~( T
.dev = {8 `( l v! X8 {2 S8 N
.platform_data = &da850_evm_tl_leds_pdata,* y! B" W- S! O9 G1 y( @4 X
.release = led_dev_release,: @) I3 a5 W1 S' g7 C
}
B- ]! L/ `2 H% @* a" x};/ U( U r1 p1 |( \4 ^* I
- K% [! C4 ^2 ]7 c: G7 F
static int __init led_platform_init(void)8 f3 q$ m7 z* M; v+ }, `
{5 x, [0 P/ P: O3 c8 A
int ret;( u/ T, V0 n/ U% a
#if 0
* |, v( E( E* ?$ e! w3 z- s# ~% [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% }# N6 x+ M2 `; h# C' w5 U
if (ret)% b; u5 s1 ^0 w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! \2 @% t E9 b7 U6 N- M "%d\n", ret);
2 L4 T Z# ? p, d#endif6 l% Q) s2 J& _
ret = platform_device_register(&da850_evm_tl_leds_device);
7 U3 l* m3 J! y2 R% @# g8 y( k/ c if (ret)
7 C6 P) F. }; r" v pr_warning("Could not register som GPIO expander LEDS");
. A9 t* Q( C2 a2 A) p7 h$ C* [ else
4 S" l; z" H+ }/ L( M+ ^ printk(KERN_INFO "LED register sucessful!\n");8 g" j8 D! d/ U5 e; C- K
/ y% h* c; r) S C* r
return ret;
/ Z! R) H' y- f& f( |1 E' q" w}" F3 v7 l3 Y Z/ V. O
1 B& c" V. t7 f. N7 {
static void __exit led_platform_exit(void)8 Q# E; u* O8 N4 B2 ?' Q
{+ u$ q" F! h& r) ?8 P7 A8 V
platform_device_unregister(&da850_evm_tl_leds_device);, X4 L ?8 ^- ^
& G8 x; c4 r) m5 D( _4 k; @. ~8 z. W printk(KERN_INFO "LED unregister!\n");
- E8 p4 e/ v$ { a Q: n' v: m}
4 w1 F7 r" N4 G1 M, i9 l; ?: l$ R
% a$ Z& {: Y s8 s9 K/ Jmodule_init(led_platform_init);
' ^9 ~- ]8 p) g: q: ~9 z! y! u* ]5 n9 ymodule_exit(led_platform_exit);
, Y; a2 Q0 C- Q1 z6 o/ n2 A% [- w, @' o' x* p
MODULE_DESCRIPTION("Led platform driver");3 o C5 u! c/ A# D1 R- M* W" v
MODULE_AUTHOR("Tronlong");
2 h; p. ]2 R: X* gMODULE_LICENSE("GPL");
$ l4 L; o; O# V8 ~( n
5 G' Y$ G) k, E |
|