|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
\( ^4 ?' c# r#include <linux/init.h>, r) F3 e. v& @7 \2 o
#include <linux/module.h>) B, e3 f% w' m- S& |$ P
#include <linux/kernel.h>
2 I8 z# J* s s1 ^* W#include <linux/types.h>7 o; a& b* s5 s5 R7 W9 {0 A. j
#include <linux/gpio.h>
) D+ E/ }; @: N1 |% s; c#include <linux/leds.h> W( a5 f0 }# E+ E5 ^
#include <linux/platform_device.h>
7 D3 _& ?4 P# @3 K! X$ h$ {# A
- r! |, S- O, M- w/ [4 z& V7 J% }$ Z#include <asm/mach-types.h>
0 w; U, y) g9 l4 |3 [#include <asm/mach/arch.h>7 P( z0 q( d9 H) a% ^8 m, T
#include <mach/da8xx.h>( ^) x& ?& r l
#include <mach/mux.h>
* r; S* X1 v7 x) f4 Z5 }0 {; e
$ R; V5 d _+ \ n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) o$ I8 l) w& q# f2 k0 I0 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ W2 m" W) I7 @# ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); t8 x- f* l7 x; p5 j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 d: o! T6 q; z: v$ o) t: J6 w. W; B# L2 Q; K5 U! [1 A5 v5 |
/* assign the tl som board LED-GPIOs*/
$ r+ E, f# a# K9 Q" |5 S5 Bstatic const short da850_evm_tl_user_led_pins[] = {' N# a, ^( E! X+ i8 w8 p& v
/* These pins are definition at <mach/mux.h> file */" T- \7 F. h; r- g& q) \, ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! P* ~! @2 W) L% C+ @0 h! P/ `' u -10 A5 c! i6 b2 c' I% L
};
! A) }9 s$ A/ |& T
+ n- k" _' o( ~& A4 |7 }static struct gpio_led da850_evm_tl_leds[] = {# L) A B2 e f1 t2 J5 R3 C
{
7 h$ w& g, R1 Z: ~, F8 A* | x .active_low = 0,3 U* [2 q/ ]! H8 i" ]9 x
.gpio = DA850_USER_LED0,
0 f, G/ I! e6 A2 V& ^ .name = "user_led0",' x; Y8 v, p1 w9 e; ?$ P
.default_trigger = "default-on",( a6 p4 p( z8 f3 r; J/ `% L: Q
},% _- m' j: b2 W9 E: K: }
{* R0 ^( ^/ X3 m% C; s5 m, E! I, u' U
.active_low = 0,# g" F% @0 F+ [4 a+ ?
.gpio = DA850_USER_LED1,- E, K/ e; m9 e3 \
.name = "user_led1",
6 _- a0 E7 X- _/ L: b, E `3 I .default_trigger = "default-on",
6 Y, i6 s; p' A/ j },- f3 L( S9 s! J6 L2 r7 y
{
M) `. G1 B& R) }* W% Y0 R; @) s .active_low = 0,
' q8 S1 D8 b; l .gpio = DA850_USER_LED2,9 |. [/ f( m# a# j6 A( i
.name = "user_led2",) r) Q# M' N' }2 U9 y! i( b
.default_trigger = "default-on",
4 Z7 O* l1 I5 a2 m$ h5 o! b },! ]: @. T/ [( x1 A1 t8 R) l0 x
{, v C/ m3 ]0 j$ s
.active_low = 0,' K2 t1 z9 C' A& e* C/ Z
.gpio = DA850_USER_LED3,' a- N' _" P0 p. H9 O1 P; [5 h9 i
.name = "user_led3",3 y. c# I( r- i$ M4 X8 j0 d3 K* ^
.default_trigger = "default-on",
1 I1 S0 d8 K; Q },
; _! m9 O; U# L4 ~8 D};6 r6 C0 D# n) |2 S
V0 U, H/ v( e& ?* N/ k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 N$ u2 e& q7 f" x& w .leds = da850_evm_tl_leds,
; I6 R+ V) q4 H$ P2 M! H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 {- D$ B6 ^9 ?7 S$ o O7 `
};( I: I' u; E# N% [6 h& F
) S* Z3 d3 L. k5 ~$ s7 ^
static void led_dev_release(struct device *dev)
4 D2 o# O |, I{
3 r# v2 o7 G' |+ p};
! ?2 d7 _! s$ S8 Y6 Z8 i9 L
4 m2 N2 Q9 v4 c F* R l; Q- }static struct platform_device da850_evm_tl_leds_device = {# i! [$ ]2 u# j- z$ h) W
.name = "leds-gpio",
7 S7 W% c6 A7 O3 Y$ K- G* ^& Y0 c .id = 1,1 A: ] v8 ~$ v( t- s+ X- t
.dev = {& n2 P) f/ q+ ?! }! d( ]. g' v
.platform_data = &da850_evm_tl_leds_pdata,
w; o1 g" p g4 Z* z3 Q .release = led_dev_release,2 s* M3 N9 S5 l1 h
}
! B" T0 N6 {( e* O% K% A% q/ `};, _$ ]! S9 e+ f$ N e
. C$ l3 U! k- C6 I, O2 o) rstatic int __init led_platform_init(void)1 W6 \9 u: @3 W9 g& |' q' s
{
6 t: Y3 t' i+ L; `) L4 d) n int ret;# H- U! }* K% y' E$ g7 q1 j7 o% Z
#if 0
. z) }( B- v6 @$ p; y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 t! k/ }: s$ ^& r ] if (ret)+ C* y& }/ w7 A; L9 f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") F; \3 L" o9 F5 k) M( A' E' X
"%d\n", ret);3 V$ W {4 K7 r9 v/ ]3 f# J
#endif
& }% a) w9 i( `3 X4 x1 z ret = platform_device_register(&da850_evm_tl_leds_device);
3 k7 I5 u9 N' _6 C if (ret)
J' U+ q! I! P/ R pr_warning("Could not register som GPIO expander LEDS");" F# V _4 t2 \# S
else
& H1 g4 l% A4 `% @/ u! o4 w2 {* @) G printk(KERN_INFO "LED register sucessful!\n");# e) b P. z) q" j! {: t4 @
( o3 E4 F$ V9 h7 N
return ret;
% s: x0 S/ w3 M3 p5 F7 ?}3 k: k9 N5 o# C% v) k8 o
$ j2 |" i+ [& e, X2 ]; y# C3 j1 l
static void __exit led_platform_exit(void)( I7 b! m1 W0 L n
{. H0 o/ k; P9 W( {6 @* K9 Z, W& y
platform_device_unregister(&da850_evm_tl_leds_device);
) a9 A) Z; s* N
1 M% \# K$ j9 e1 j0 R$ m0 y0 s printk(KERN_INFO "LED unregister!\n"); k1 `& ^# L. u1 P: x5 M
}
& ?% z( y* t7 J+ `3 _6 k# n# z5 C# `* c
module_init(led_platform_init);% m: R) o! a! h* c+ w
module_exit(led_platform_exit);
8 e, @$ E- p, A7 A0 F4 h) H: B* u& L1 i! k) C3 k
MODULE_DESCRIPTION("Led platform driver");
7 ?% R5 G& O! {" o. }MODULE_AUTHOR("Tronlong");: d1 u& c2 ~. V$ p' x4 [! @
MODULE_LICENSE("GPL");
' P0 |% i! r' C( I# n0 o% v( V* B. u5 n' K( Q7 K, |# C7 b
|
|