|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 g0 h/ F7 x% W' }7 R: u#include <linux/init.h>! `. x4 H$ [6 n6 _! t# w* J
#include <linux/module.h>
4 B& b/ y/ Q4 Y; h" b9 J& Y# U#include <linux/kernel.h>9 D, `( s0 V. E5 W* d: I* w
#include <linux/types.h>( s! B) L# u4 Z4 B6 k7 ~/ B4 X( x
#include <linux/gpio.h>
0 Y- }" `! T% l+ p0 Q#include <linux/leds.h>
8 E0 z3 f3 M# {) ^% |% G7 c( G' i#include <linux/platform_device.h>
) W; t; c, f& v( r& g0 C- x$ G: t) D# [" [2 l! O
#include <asm/mach-types.h>
' k1 k- I2 V: I#include <asm/mach/arch.h>, k6 }% |/ B; _1 E! C
#include <mach/da8xx.h>
0 ]8 F& A" G% h6 h) J#include <mach/mux.h>
( i& `, M2 S# ^' F& K7 e0 V1 @ y0 t& `5 n; A5 j# ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" \" _# d7 f. H! @6 |
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: `8 b& [) r9 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); b' S O! |6 b" G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). l( \9 L1 D7 l( W; J& n; V
5 S5 `. q5 w" x
/* assign the tl som board LED-GPIOs*/
. O( S8 _5 x( R3 p. ?+ ?- M% Q5 cstatic const short da850_evm_tl_user_led_pins[] = {% O! w, v7 n7 d+ J6 @( j9 t
/* These pins are definition at <mach/mux.h> file */, O1 W& Z9 r: D: G: ~, o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: r. O3 _# w9 Q! [
-1$ H2 ~/ j! T1 i+ u6 w- r
};8 h9 r) O) g% @. a
1 d/ c2 T3 O' G$ Z' ?; [static struct gpio_led da850_evm_tl_leds[] = {9 k/ Q9 Q0 r, ]
{$ h: q6 t1 j7 v% ^, }
.active_low = 0,
) P+ ^0 h5 O$ w+ r+ ^% t R C' ^ .gpio = DA850_USER_LED0,
1 H6 l5 ?* P, I [2 D/ p0 m# j .name = "user_led0",
; @8 o9 x/ r9 R .default_trigger = "default-on",0 ?1 \! N' z4 H9 P0 `
},
. K8 k6 v6 N% _5 b% y {/ l) V- @2 K z% I7 l; O
.active_low = 0,
! }/ j3 T9 M! b' A% b .gpio = DA850_USER_LED1,
% d1 R. L3 L3 i2 r ^: N .name = "user_led1",$ A/ @5 @. B) M% I$ _6 U
.default_trigger = "default-on",
! j6 h4 A, {6 }- q7 Z },8 d8 f6 }4 Q9 C$ {8 ~ D
{
) J+ M O% S; p% V+ S/ w .active_low = 0,) Z8 j' u3 Y! _' A# x5 N) r
.gpio = DA850_USER_LED2,+ k( h- r/ b3 T% n5 r# e' | Z5 J
.name = "user_led2",
4 T$ O, h2 ~: l: S7 i- ]. O; U; ~9 |% Q .default_trigger = "default-on",
( R6 @" n9 M( T },: W$ i% i# H$ M
{2 _% Q5 J7 e) C5 b) D& L9 w
.active_low = 0,
" O K7 U* Y: o+ L# I$ `& X4 L .gpio = DA850_USER_LED3,
' l3 g3 `7 B5 V1 g5 f/ I3 v0 ^$ t( Z .name = "user_led3",
$ f/ u# f1 ]# A4 N" ^; M .default_trigger = "default-on",2 z0 u6 A4 A5 N0 c0 ~, G
},
* Z, e' r: v2 I* d0 y};
) r' ]# u" ^7 y3 I! ]. M0 W4 b7 B/ X2 k. u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& b, c9 Q) t* |7 ~" Y# y* u .leds = da850_evm_tl_leds,
/ g( `* J5 d0 { [6 s- e. T, p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! ]* H E W0 l
};' Q; ~" [& b! G
7 u% P! x2 k# \0 h7 ostatic void led_dev_release(struct device *dev), R: o0 k' n3 d! n, b/ _
{
# L; W1 L6 x7 f3 V( P};
0 c/ a4 K7 z# @( X% P7 A: E/ K8 A& b. c# y/ F8 n( b
static struct platform_device da850_evm_tl_leds_device = {* I: o% C/ r+ b! o1 ~
.name = "leds-gpio",
( S8 Z% ]! U$ [8 [3 _) Y .id = 1,
# G" E9 D: |2 _- A3 ]+ N .dev = {3 s: _7 R. Z5 |. l
.platform_data = &da850_evm_tl_leds_pdata,* L8 W5 S+ o5 M& u
.release = led_dev_release,
3 q3 d) G" p: _0 x }
' j9 ?; o! n+ N# k0 j};
: q3 E" H+ H y" Q
% ?9 t% Z. W# S8 [3 astatic int __init led_platform_init(void)
3 C5 R1 I- \0 [! o/ {, u{! |/ P+ e6 W$ B! P8 G' C
int ret;
1 {5 ~& Q" b7 f" `#if 0
" G. c6 P& Y* a- C% _, | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% h' u# U; _! A- {; u3 f$ n
if (ret)- ^0 [. e: O7 y0 H: s2 d. o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; ]2 Q5 x' H, `; a! o( ?7 F0 t
"%d\n", ret);) F* e( T7 p1 b+ D% R
#endif" @5 r( h+ K4 G0 z) i
ret = platform_device_register(&da850_evm_tl_leds_device);' u5 K5 X& D% a5 j
if (ret)
. s5 o( _8 u2 _0 V: a+ a pr_warning("Could not register som GPIO expander LEDS");6 W6 s- Y# d* }
else) ^0 z8 r2 T& U
printk(KERN_INFO "LED register sucessful!\n");7 t- x) K* Q6 F( Q1 Y& w
% s- k! i. v$ f5 ?# Q/ H! m/ E" V
return ret;2 d3 Y W" n" Z" A9 T
}
- H: V: ~ p$ F! p; f. q+ O, R: a" \" U5 {+ M3 K- U( Y
static void __exit led_platform_exit(void)
( E- R) _# `/ p4 M2 `{
$ i9 D# c( Y( z) }2 v+ V8 ~ platform_device_unregister(&da850_evm_tl_leds_device);0 m& G+ ~& a" F9 }# W( v
$ B* y; q7 f" X$ W
printk(KERN_INFO "LED unregister!\n");
% O+ u/ M: @! a: r' z/ n}
6 N Z G$ \! A$ ]$ B( ~0 x, z/ w
+ y2 V3 u n5 Z$ a+ Kmodule_init(led_platform_init);
# c& l! `. ^ g* n3 `/ M6 hmodule_exit(led_platform_exit);
4 a/ K7 R: ^0 ~, h0 J0 i& V5 `. s0 n+ g% A7 X
MODULE_DESCRIPTION("Led platform driver");
0 l k2 C) G) d4 x: l, ]. O. qMODULE_AUTHOR("Tronlong");
+ m( _% g- L5 }MODULE_LICENSE("GPL");
; I( }6 j" P) z; Z5 u& d8 b) K7 v4 M# N4 ^: p+ w$ D7 X
|
|