|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ r1 Z: o7 F$ N#include <linux/init.h>
# Q) ` T M: |: ^3 `/ o#include <linux/module.h>9 A* x: F' V) v1 A' a4 @
#include <linux/kernel.h>
1 d. A W% f4 e G! g" ^#include <linux/types.h>
2 g) ]* r" |( C2 D7 n0 V#include <linux/gpio.h>
7 W& l$ a9 U x- Q: S; G; S6 D#include <linux/leds.h>5 M$ ^8 U5 w+ E' `2 g5 K0 k
#include <linux/platform_device.h>
+ A9 V2 |0 H0 ]" {. w" r' M: O+ m) g* x `7 V
#include <asm/mach-types.h>
; O8 L" G9 ^. w% ]6 @' N3 e# z#include <asm/mach/arch.h>- ~ @2 _/ _* ?6 Q
#include <mach/da8xx.h>
6 X9 v0 N% I8 G- B#include <mach/mux.h>% R& Z8 M: Y3 k+ y# o
; {) Y3 ?" G5 _, H# m/ R& w; }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 _% L: l+ k! Z$ r( d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( H6 {' m6 Q1 y- ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* I6 k* e- F0 j1 w7 _/ C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 K o8 h% O8 F* f1 R7 J% j" }: T
( O! }' K3 c0 P9 v/* assign the tl som board LED-GPIOs*/0 O" s; ?$ g3 `( O$ f# a. |+ m
static const short da850_evm_tl_user_led_pins[] = {
9 ~: T% N+ M; }8 [6 z /* These pins are definition at <mach/mux.h> file */; \4 _+ C+ X* y, g$ J6 _5 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 R) k% a5 k: M3 p6 X0 Q -17 T8 S( y; G% t1 J& M7 l! \! D
};
4 z" V3 J( L7 C5 {4 A/ i$ d: p, ~8 Z, m7 V+ ~
static struct gpio_led da850_evm_tl_leds[] = {
9 N) t0 i% ]) B( a' O2 p; j4 l4 O {4 Z4 {8 s( [8 k: ]1 _
.active_low = 0,
( {5 P, b- N; u8 w( d .gpio = DA850_USER_LED0,4 l! D" ?9 l, i B
.name = "user_led0",
$ c0 w3 W3 X) Q6 o .default_trigger = "default-on",
; u, m N0 Z7 }$ `" k5 W# G) Y2 w },8 V# \1 O, p% e9 V9 ^2 l
{/ x5 o" u9 u& m- ?( c* N
.active_low = 0,
' I$ i% J8 p& z! C" Q .gpio = DA850_USER_LED1,: ]2 M, }0 P+ z, Q# _& _
.name = "user_led1",
2 d5 Y ?( B' d. K* Z+ E, B .default_trigger = "default-on",# G& H! O/ q J# |
},2 S' z# C0 W. V0 r8 j6 g
{
2 ]2 e8 c' M8 D6 t( B4 { .active_low = 0,1 _" ?) U3 u1 O4 D% |& ?8 t$ v! m$ J2 A
.gpio = DA850_USER_LED2,# D ?8 y0 `5 d- f( k4 ~6 P
.name = "user_led2",# q0 p6 `2 h3 v# R
.default_trigger = "default-on",, j5 {6 p' M# M+ ]$ {; u
},9 Z" k( X- l% E. s4 j3 Z t' z
{0 }1 W3 k6 v0 C5 U" ~/ u8 e
.active_low = 0,
0 j. S0 ~% g) R6 D+ j3 q" M4 { .gpio = DA850_USER_LED3,
) p2 a" x( W0 j* i .name = "user_led3",
- G) E* P$ i0 J2 c+ U .default_trigger = "default-on",
2 o1 ]# ^5 V: A8 P },2 j' \, R' T' y; H8 ~6 E# O! p$ S
};
+ z% o/ `# P; x! [) G1 v* t! a
s/ v3 e4 _, C7 I9 o$ wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. U% V. ]; P$ o7 F8 r .leds = da850_evm_tl_leds,
* V+ O- s' E( m; s4 S; ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- s* A% s; \6 m
};; r. z$ c5 |, c8 Q
9 c7 s6 }, I- u. J- y/ P2 X
static void led_dev_release(struct device *dev)
6 O1 J2 f4 i9 C% j; z: ?{9 f0 W0 T% H1 W6 ]& a
};
# J$ c' o& p3 w k* W3 a6 W- a: M
5 g% }' f% o1 w7 I) I9 q% K1 T7 z6 qstatic struct platform_device da850_evm_tl_leds_device = {6 I+ { }# N" w3 x; t3 V
.name = "leds-gpio",0 A) E! |1 \ N
.id = 1," F8 T& P9 O, ]/ \, z
.dev = {
8 a4 e+ V' i+ j+ N6 U+ H .platform_data = &da850_evm_tl_leds_pdata,: K7 h) {8 E3 r7 X- {; U
.release = led_dev_release,
. U1 N) I" G( V3 v, e% y/ x' D }
9 G, Q4 t& y+ P2 K! c1 ?# G};
, K. U9 ~- _6 k c7 E, \* _$ j9 t5 |; r1 k2 c5 \3 Y2 @ B p
static int __init led_platform_init(void)) L' b& h a1 }# ~6 _5 M! v
{+ T. @7 ~) M7 |, ~
int ret;/ _8 u. R4 v6 i$ `- E
#if 0
& ~/ p% |$ A$ C/ P3 b# { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( G0 i2 j- K) o) A% G if (ret)
7 {2 v+ U. U: [" _6 H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( ?: T& R3 `$ ~: i3 x
"%d\n", ret);
0 U7 O! p+ r4 d#endif" V6 D2 I4 y( I5 M) t4 Y
ret = platform_device_register(&da850_evm_tl_leds_device);. w3 Y: \, P' K" t( j, A1 O
if (ret)
7 d; W1 V' {) N3 R: P" g1 ~7 x pr_warning("Could not register som GPIO expander LEDS");
7 z+ b9 ^5 x- _2 `" V else
+ `; R+ J7 @9 d4 v% f printk(KERN_INFO "LED register sucessful!\n");# b+ Y o1 n/ u( Q6 H8 E
. s+ j" u$ \6 a3 f, L6 J/ w return ret;
( {4 g$ N. C4 t}% W1 p! k* G" T$ K4 [4 i
$ \& h+ |& p4 x. t4 g9 ?static void __exit led_platform_exit(void)* t; H4 Y4 E W* X0 m9 n2 P
{$ \; n7 g4 {8 Z
platform_device_unregister(&da850_evm_tl_leds_device);* C- o" x4 _/ `2 v8 a% h
7 S2 T0 D+ P" U& \
printk(KERN_INFO "LED unregister!\n");
' z3 R; p W( z6 W- g' `}
F1 L/ A! W7 ?5 g2 t$ b* h; e% K! p
module_init(led_platform_init);2 V/ {0 r. @6 _6 M; y* H' I& j
module_exit(led_platform_exit);; c" p5 ?9 \0 B
0 s; q2 ?" K5 ?MODULE_DESCRIPTION("Led platform driver");
; `$ P3 Q1 `0 c- SMODULE_AUTHOR("Tronlong");
, u: K" A R! K- o }# \MODULE_LICENSE("GPL");
* N9 r! a% K7 {1 s: W; A* I; S. A5 j1 \9 y
|
|