|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: R9 O3 C* H; q9 T
#include <linux/init.h>
1 S& G9 n2 p/ \) @2 n( A#include <linux/module.h>+ T2 E4 j3 J! P4 ], j, m! e6 {6 p
#include <linux/kernel.h>
, S& J. ~9 S p6 _#include <linux/types.h>* |# a/ n6 w" Q, |5 O
#include <linux/gpio.h>
, P$ Z1 ^( M+ Q, W& h# V, b% I#include <linux/leds.h>7 f- v$ Z, F1 f! L; k
#include <linux/platform_device.h>
4 Z" u4 y/ b" k7 f+ K& \
. \: Q8 e# Q7 L4 n6 Z2 J6 y# ~#include <asm/mach-types.h>
" v( y% I: Z" t" o+ |$ h#include <asm/mach/arch.h># \& e1 k% E. G- Y2 J
#include <mach/da8xx.h>
/ W( W" a, d$ L$ {6 N4 [$ [! X#include <mach/mux.h>
- d, ^6 V: z# V( m
Q2 S1 T( @, o2 Q0 @* j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, Z! F- ?* c+ @, F: i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); D0 L$ f/ {% w1 O: S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 P& p7 G5 ]) G+ B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); m G7 `" k7 ^2 }/ y4 i& D- I
q7 ^; f3 |1 y; ~5 l) {* l/* assign the tl som board LED-GPIOs*/, b7 [0 ?$ v. q2 _* N8 t+ J
static const short da850_evm_tl_user_led_pins[] = {
( R5 Q |. f8 t. @, a /* These pins are definition at <mach/mux.h> file */8 f5 `) }+ }2 B- z$ M8 ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 w; a. r8 h. H. k -1$ z0 V1 T+ g% i( R4 q4 _
};& q( E* j8 F8 j$ Z# @ B2 ?
. L+ R- m2 Q1 G" e( wstatic struct gpio_led da850_evm_tl_leds[] = {
& l4 V6 c" @- [0 a# d6 T {
- q# K- V5 N/ I: ?9 J/ Z) S2 a .active_low = 0,0 M9 W/ f" r- A& o+ K: g
.gpio = DA850_USER_LED0," T8 @+ y) z( e6 V+ v
.name = "user_led0",
$ u. u& D* h9 k* X! T .default_trigger = "default-on",, }, z# Y' _- n8 \
},0 ?% F1 y. M! ]( ]2 }# v j4 X9 e" F' {
{' q. A! D7 H) O
.active_low = 0,, B$ g; [! h B8 p
.gpio = DA850_USER_LED1,6 P3 J* @6 e0 e; n* W! O9 s* O- {4 P
.name = "user_led1",
# Q3 }' B6 j: l# u) A .default_trigger = "default-on",
0 E" @8 N' Q7 v# t },: C/ S6 r s+ V' [6 X8 D% d6 @* j" S
{
4 B: f7 {# I& l- q5 W .active_low = 0,8 A+ Y: E, D j& `( U! j1 @# \7 U
.gpio = DA850_USER_LED2,# U$ ?8 w2 c9 f6 q' U2 |
.name = "user_led2",; e/ t3 w; ` B+ o$ l& x, s
.default_trigger = "default-on",
: `0 A$ X. y/ L6 f5 q( L },6 S6 k+ w. y/ P* D
{6 u8 I% i$ [; a; W" s
.active_low = 0,8 G) x1 n7 E# O0 n6 {& z
.gpio = DA850_USER_LED3,
; l1 X( x5 J0 e; {4 k7 Y( |4 o+ q .name = "user_led3",4 f: B. v& M9 y. w( n) I! P7 t) b4 m5 l
.default_trigger = "default-on"," U" i* F; V1 N4 I O9 W0 N) n
},
2 v3 W2 R P s- q' ]};' q; t( m/ x+ l4 Y5 E c ` ?
3 v- G2 ^% q3 a( {: H% e& i5 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ H7 H; x) F' h/ V4 ?: |3 F; t1 w/ W .leds = da850_evm_tl_leds,
6 ~7 E3 j) R7 _4 ?( ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 z2 H- o; C8 d% l+ o
};! l4 u3 _/ w6 h/ s. F0 s& y. ^
) r' u9 J5 k* ~" C
static void led_dev_release(struct device *dev)
! {, Z& a6 r# [# ]{; M% a: U9 K8 ]! ~
};5 p; v0 T) c% F* u% `* Z- k
5 e& c4 J/ ]$ q+ ]% ?% ^& q& istatic struct platform_device da850_evm_tl_leds_device = {
7 w: d! g: o" B- I( J' {1 Z4 ?' S .name = "leds-gpio",7 [9 g: y9 K* u8 x
.id = 1,
6 p8 G' @& B9 i+ \, S' o' s1 O/ m .dev = {( k1 B1 y$ U9 I% R
.platform_data = &da850_evm_tl_leds_pdata,
6 N$ V; F/ C% f, M- T3 V; q) a .release = led_dev_release,
+ N7 K; C# k" _ V- `& _ }9 ^, H/ c- R3 i+ r* P" V
};7 `4 ~4 ]; M; w$ ]" c3 ]* @
) x8 H8 W5 c5 A0 S8 g) [" estatic int __init led_platform_init(void)
" `1 X9 ~" _% b: ]7 C1 c" r{
6 b7 F A4 g8 y! o int ret;1 W( }4 g" ~9 ]
#if 0) ]( I/ s6 g; C7 E6 j1 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" b: n4 ?/ z' F1 h6 R% r- Z$ e
if (ret)
, X7 i; @+ L' p; b( w4 W4 r pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 O( g1 K# i; C6 ^
"%d\n", ret);
5 ~: F: d K2 _) H#endif: M5 \; }0 h' o8 n7 [5 r/ ~
ret = platform_device_register(&da850_evm_tl_leds_device);
4 N/ e3 s1 i: B; ` if (ret)4 d1 o) w1 c( E% z) R; i. f
pr_warning("Could not register som GPIO expander LEDS");: w) n. S1 E/ o1 Y
else: y5 ^( J( ?9 H3 d6 S; w$ m
printk(KERN_INFO "LED register sucessful!\n");* S9 w" F5 L/ J8 H
; X& X: `' M) H: A0 J
return ret;) D; r! s: V6 T0 n" s. R5 j( |6 q' U
}0 o) p1 |$ ]# y0 _ L2 e% d" d
2 ^* v. U1 x) u0 n2 L7 X: h1 p
static void __exit led_platform_exit(void)
0 n7 t4 ~9 K- p) D- k+ f0 z; F/ ^{
( y% P# `7 k+ U% a( | platform_device_unregister(&da850_evm_tl_leds_device);( M& s8 s* X+ Z+ g" ?' y
) x; T+ i6 S8 S printk(KERN_INFO "LED unregister!\n");' j [+ Y# B2 u: ]6 d4 u e% s
}0 [1 v) }8 T2 \# G4 d
" x; t# }) t. ]/ {: k
module_init(led_platform_init);
+ q O* z8 T2 y* N9 p2 G5 \module_exit(led_platform_exit);
+ v) R' ^! Z4 e& H0 l3 Y' F$ V* i; n( n2 J; L7 B
MODULE_DESCRIPTION("Led platform driver");( c. v& }) B( u- }
MODULE_AUTHOR("Tronlong");
7 z& A9 k# q3 V6 z& P# U" RMODULE_LICENSE("GPL");4 [5 j9 O, v! V3 Y, L3 J s
: q! N# X" U" k' n \
|
|