|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 K0 B( S0 z, p
#include <linux/init.h>& Q" x) q$ v% h2 A2 j4 |' F# P
#include <linux/module.h>
! V, n, d3 _2 X4 B#include <linux/kernel.h>
0 ^7 o# ^9 m" B, p9 a/ ]#include <linux/types.h>
M1 ]8 Q$ G+ f3 {. s9 K2 Z+ g#include <linux/gpio.h>4 P$ `0 ?4 S. |8 G/ v' Y/ H/ X
#include <linux/leds.h>
. s2 k2 J/ b* \: C#include <linux/platform_device.h>
5 s4 V& q& Y5 { r; v4 n$ e! l5 @* d* h
#include <asm/mach-types.h>1 X+ y- H5 i3 |7 ~# Q
#include <asm/mach/arch.h>" b3 M/ X: i/ ]
#include <mach/da8xx.h>) G$ B' E$ R1 r Q. S
#include <mach/mux.h>
2 a; Z# {3 Q1 ?8 C0 e0 X
+ C7 E5 J) C' _) w% n6 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 S; m7 `9 y! Z2 R# y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 N% Z: d+ Z. F; p) w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); K" u; J1 |/ s! w# y" e) }' {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# o' t3 f ~, F5 ~. J! \: l1 C9 B
$ ]6 r3 l) i! W1 G( K# ?8 \/* assign the tl som board LED-GPIOs*/
. W: y) J* Y" o' p* T/ Astatic const short da850_evm_tl_user_led_pins[] = {
! y2 g, G$ d" X /* These pins are definition at <mach/mux.h> file */2 B \/ I+ T7 o, g6 X+ t1 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* l7 `/ A9 P1 M, u
-12 E2 z8 v+ ~- @( C0 [
};7 c# _ G S: F; E- J, \
& [) n0 F8 u F0 D! a
static struct gpio_led da850_evm_tl_leds[] = {
" T8 M8 z6 o$ u8 y {, i/ t3 Z: E3 t* m- T' z
.active_low = 0,$ N" l+ x3 @4 E" O( s; @
.gpio = DA850_USER_LED0,: W4 y& x! U/ c1 o% o' L5 s0 u& F
.name = "user_led0",# G' j, U: E* ^0 B }
.default_trigger = "default-on",
: b* ~1 _0 N* g6 y: X$ A },
, _( V& s" M9 H% S; i z {
. N3 c( R; \, @# Y# g U .active_low = 0,
9 Q3 l* o+ T) V& A, I .gpio = DA850_USER_LED1,
+ {3 e7 ]1 i8 i, T3 N5 ]( o; {3 w .name = "user_led1",7 E. k7 v8 e6 l
.default_trigger = "default-on",% U( Q. D2 ~( b. \$ D+ Y, z) `
},
* p# X q$ Q- @8 J; f4 F- v( { s {
( {4 U+ d8 {, F7 e' j/ c .active_low = 0,
$ q; \5 V3 J+ o+ b# I N .gpio = DA850_USER_LED2,
h* R L! Q& P .name = "user_led2",
3 g% B: N9 Y& F .default_trigger = "default-on",' K1 U6 |, e/ j, h
},
; e; {1 M4 ]8 ~' [$ E$ \4 D" ^1 Y {
6 ?) O9 N9 K; L) F! A .active_low = 0,
: J1 X% ^8 y. B: z! P, R! l9 P3 @ .gpio = DA850_USER_LED3,0 i" n7 ]1 k4 ]% c; F3 K
.name = "user_led3",
5 {! d: k* u; b5 d- B .default_trigger = "default-on",2 {; n9 D l0 W: c
},
8 e% b- {: b5 I" W; f }};+ B/ u N. t7 f/ O
# P5 f/ W% q4 H. n, N9 x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- M- X8 ^2 t5 j# t
.leds = da850_evm_tl_leds,
, N. Y/ K# F4 @0 F0 E0 b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' D$ |9 H5 }; v: n( J; n0 Z
};
8 ~1 r: s; B3 s) {9 \( [) F5 X/ T. D! q& f
static void led_dev_release(struct device *dev)
: `/ v6 Y* r$ g1 X" L) Q4 m{
M# \$ u3 S# `" A6 M M/ C};( W1 k; X9 ], b! G5 B
; w! m1 b/ k- s8 A* W, X- Y3 `
static struct platform_device da850_evm_tl_leds_device = {3 a5 Z3 U3 K: r) o9 ~. Z% j: s9 U
.name = "leds-gpio",; ?9 o% O' M" c* J) h& y6 f: J
.id = 1,) |3 c$ t- f) |
.dev = {: ^5 |" [ Z, S+ X
.platform_data = &da850_evm_tl_leds_pdata,1 f. i+ E$ b5 |- f+ t
.release = led_dev_release,( t/ D2 K% _+ B8 v7 m6 Y
}
) [" Z# N- d; t! t};
$ y; j6 y# D2 P- Z, B9 G1 }8 O3 t) ?, [8 L4 i! ]
static int __init led_platform_init(void)* N+ |9 E$ o2 S0 d) V) h
{
: A! B+ \- J, b0 k1 X* ?. V2 _ int ret;( ?3 Z$ i. J1 Z) y; j. i. k
#if 0
+ p3 {3 A3 X2 R8 G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ n% j* t& H$ H' Z' g
if (ret)* P% Y& D: ~0 G$ e9 w) c1 ^+ B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 r* [2 [5 l; a( `' h. g
"%d\n", ret);
0 L2 b5 B3 ~# F- F' d#endif9 Q; H* N5 O$ Z; L: m
ret = platform_device_register(&da850_evm_tl_leds_device);0 L, p! y% O/ n2 A6 @8 ?
if (ret)$ l9 s6 ^! g' {. r0 ~
pr_warning("Could not register som GPIO expander LEDS");9 R1 |6 ~1 [- a+ g. c. h3 _
else; K* c# i: Q b: t9 W% x
printk(KERN_INFO "LED register sucessful!\n");
- p' {' T; Y% A% k4 R' p2 g( P7 L: V" e5 `9 R' t% E# {
return ret;
( q L* h8 Q6 c$ U}
( ~+ u0 G0 g1 v( z% D3 I( w! u2 }' U2 ] m, o% L
static void __exit led_platform_exit(void)8 ^0 x s9 K& n0 d1 ]
{1 ?3 I _ _' ?! y' }! Z
platform_device_unregister(&da850_evm_tl_leds_device);
" L) Y6 B9 x- p# K! j: i7 w4 R& S% f, x5 H* K6 }( h: O2 Z" ?- Z6 M+ c
printk(KERN_INFO "LED unregister!\n");( P$ c6 }: \0 {7 j r
}& \2 R/ a5 x. j
8 c# w k5 x0 C( b$ l; Amodule_init(led_platform_init);2 W F {! C2 u9 d; c1 _
module_exit(led_platform_exit);8 Y7 E/ N( p. R0 N7 ~) e
9 l! @" f- a- a7 o ZMODULE_DESCRIPTION("Led platform driver");
/ h1 t+ {( f* a' AMODULE_AUTHOR("Tronlong");( ?, Z( v% S) A
MODULE_LICENSE("GPL");7 e9 T5 p% o3 A
X1 d8 c* Z9 N' ^, G( D
|
|