|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 p9 F( M% A, S v3 t" G4 g9 T( Q
#include <linux/init.h>9 V8 D- h" }& V! P
#include <linux/module.h>: `! t/ ?& I; E
#include <linux/kernel.h>
3 M* u# g, X8 E% r#include <linux/types.h>* z; D* R. _, e* @" ^
#include <linux/gpio.h>
' d3 @: Q3 o% Q3 h" i#include <linux/leds.h>
5 c6 c5 L: P w/ o1 N" @, F" E2 c#include <linux/platform_device.h>4 i2 ], k5 r) T6 M
! X6 j$ A5 v6 H9 T; U5 b9 [#include <asm/mach-types.h>
% ~5 t; J" k7 e5 u/ N, \1 u#include <asm/mach/arch.h>. P( v7 y4 ?0 u$ F$ ~$ }
#include <mach/da8xx.h>
# I; g' N2 e/ ~& u* X1 h# \6 S: n/ w#include <mach/mux.h>
' y7 ], E5 F5 Y0 T$ E4 S. b
Y, l( D2 r0 U1 S5 k6 ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( T# L+ [# A% v+ ] I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 y1 d. J) t* q4 {# E3 c$ l9 I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 J6 P% W' e1 }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): C% u1 k1 z' k7 u: G
( ^; Q6 ?, g* v" s& r5 y/* assign the tl som board LED-GPIOs*/' @$ f* C* }: r3 U/ Z# l
static const short da850_evm_tl_user_led_pins[] = {
. @- X3 D! d! c; A1 a; @/ j b /* These pins are definition at <mach/mux.h> file */
, m. U5 O5 v2 f2 W5 R/ _& R) @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 x) F$ \1 y) C4 E -1
2 J1 k I. {9 v8 D* d};
5 g9 u9 K# r& X, Z/ `! |" J# {1 S$ m/ D; Y
static struct gpio_led da850_evm_tl_leds[] = {
. g4 _; Z# t" @( e. e% ^/ O {# X2 c! p: X3 w: ]
.active_low = 0,; E/ k* ]9 T) u2 M9 W+ _! z$ O
.gpio = DA850_USER_LED0,7 m* S- Y, R' v
.name = "user_led0",& o& @5 N e! j( A1 e
.default_trigger = "default-on",
; q5 s; f) _& R8 b5 n },& c Z, y% w$ G/ \# s
{: e+ X8 _; }4 x6 D! x
.active_low = 0,7 J1 F9 w/ R- H, ]& \' T8 o. `+ o
.gpio = DA850_USER_LED1,
4 k! |2 k f1 t N) u/ Z .name = "user_led1",
$ Q6 r2 G( r: E1 j& y" Q$ X% q .default_trigger = "default-on",/ \( d' T$ T4 h' y) M0 y$ n
},. s# O) M- D$ o% x7 {, p
{8 P8 | p# |# ]
.active_low = 0,
( H' l5 O1 h. z7 x7 o* N .gpio = DA850_USER_LED2,
, U. Q7 T3 \: Y$ V/ |9 f .name = "user_led2",
' W% n1 E2 F) r( ^ .default_trigger = "default-on",
( z( Q/ L( E0 {1 ~" l/ @: g },7 e& A! u1 I% m
{
; z' s& t+ D- s1 s( D, M$ ` .active_low = 0,
& Y& v/ H! E! R2 |# w .gpio = DA850_USER_LED3," Y8 G D3 q* l2 H9 r3 ~+ g/ C
.name = "user_led3",! w' T' q* g* A! F7 S s
.default_trigger = "default-on",% S Q4 V' }9 D+ T2 d
},; f9 X3 T0 [: C
};
% S+ _3 N: w0 H8 E
1 o3 R" w# i: k% w) Y; J; Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: s$ O! o7 W1 X' K) p$ v9 S
.leds = da850_evm_tl_leds,2 Q0 A( A/ y; M2 I, y' e2 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ a9 i8 v' r' O};
, A5 ]. _. j+ G! P5 F1 ^- P6 |2 V" Q& |; U
static void led_dev_release(struct device *dev)
& }" ]% t# _- x) }0 ^{
- c/ l9 `2 k# \" B' M- g% f};: k6 N" Q _: W) c8 P# F6 ?2 Z
' \* b2 Y+ C* gstatic struct platform_device da850_evm_tl_leds_device = {
) j! x. I$ y3 W6 u .name = "leds-gpio",
/ Z g& W+ @, [ .id = 1,) {- ?0 t; I& t0 K( T! O6 ^1 u2 p
.dev = {' g* ]+ B0 ]5 c1 `" D% C6 [
.platform_data = &da850_evm_tl_leds_pdata,9 v0 ]3 W3 P8 I. Q
.release = led_dev_release,
! l' P$ g. \6 g, i$ Z" v }( k2 ]- V& G3 Y3 Y1 @* Y* a0 ]+ }
};
. H# |! n; d3 Y% B1 s v6 R5 \- J* Q: t
static int __init led_platform_init(void): W5 h1 r3 l0 W- x, \; G/ g
{
. r# e4 l+ {0 x. X7 C int ret;0 k( Z4 N: `) W
#if 0
$ o' O5 j0 W H) J; c1 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; r* V* V4 x' ~, p1 q+ D1 [! o( J. }
if (ret)% F% Q' B, }5 m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ Y; T% c- Z( i2 o/ H' c
"%d\n", ret);, G5 m, |& @0 @* o
#endif
' z) U! e) F) }2 e ret = platform_device_register(&da850_evm_tl_leds_device);# N; `: g- z* V- `+ Z) y$ v5 k4 i
if (ret)
/ {6 e# s5 m4 p2 q; ^' P2 _ pr_warning("Could not register som GPIO expander LEDS");6 Z7 X! N* Z- J$ b. {+ Z- x
else( J5 g/ l3 ?, B
printk(KERN_INFO "LED register sucessful!\n");- V$ R( a6 Z" p2 J+ M' \. U
& Q# |2 M& n% l2 W/ t
return ret;
5 z7 g" w9 H, n}
G* R3 T, ]4 N1 r% S/ C; r g# F& [& l( o0 i; |) C2 {
static void __exit led_platform_exit(void)
0 A' N' D7 f8 }+ \" K{- ~9 c) U7 ]6 j3 A* d# m' d$ `
platform_device_unregister(&da850_evm_tl_leds_device);
. K- t+ S$ o+ v/ s. i' O, h$ a& u7 N. U7 i3 e' W
printk(KERN_INFO "LED unregister!\n");; n/ d" V, n% @ _+ R1 l
}; E, T$ z! w; j% K, _
% z, {+ A* L: k: q8 ]module_init(led_platform_init);' R( t- {1 Z6 Q2 X- D
module_exit(led_platform_exit);
9 U6 J5 f. ~( Q a0 ^
3 T0 N. G9 _7 g, |( hMODULE_DESCRIPTION("Led platform driver"); O1 k6 {4 x+ u# \! T2 U- n
MODULE_AUTHOR("Tronlong");* }3 C8 i4 |" [
MODULE_LICENSE("GPL");7 R( z4 a$ G$ a/ Z' [: l
* X8 ?7 d+ f% I1 \( X |
|