|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 r8 U* B7 F# |6 p D( h#include <linux/init.h>2 B$ f/ F: s, v
#include <linux/module.h>& E4 M9 H! o% T6 N- \: o
#include <linux/kernel.h>
/ \. r% \: O2 ]1 }% w" ?$ x#include <linux/types.h>
) B! W, n8 n0 [; R5 E% j#include <linux/gpio.h>7 |' I' w$ m9 C* O
#include <linux/leds.h>/ ^+ Z; n/ K. b
#include <linux/platform_device.h>
7 e, S* U2 j& H' y1 ^/ m) |6 C" w1 J
# h9 s. F( v; P+ c4 E6 K' g! U#include <asm/mach-types.h>
# J3 h' [, m( |4 f; l! Y( U#include <asm/mach/arch.h>
R& Y) O3 s8 T8 C#include <mach/da8xx.h>% @" z( C/ j$ x7 }' ~% z
#include <mach/mux.h>( f2 a8 Z/ Q3 V, M& b
" O: J& _$ g/ Y5 N8 b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. C8 g& L- E5 R8 K* K) p, G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! F6 `1 ~0 A- f( o# E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ M+ w1 f; @8 T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ h c) O+ b4 l7 j% `& c/ K. H* n
& r, P" X6 p( f" I
/* assign the tl som board LED-GPIOs*/
) E. u4 Y+ q( J, l) q2 Z$ ^static const short da850_evm_tl_user_led_pins[] = {% x" p% y5 z, y$ C, Z7 a. \
/* These pins are definition at <mach/mux.h> file */
' ?" _' e4 f7 N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 o/ _( B6 |% n4 u) B
-1
2 a8 N( t! ^5 p};0 f; A5 g; g H. K
8 Z% R! L* u- B+ W6 e: Tstatic struct gpio_led da850_evm_tl_leds[] = {% X% `* j w4 J+ l( V* {/ `; F
{; h4 [( Y# p* L# H
.active_low = 0,
& G+ Y4 j( y: G .gpio = DA850_USER_LED0,
1 c5 I8 G) F( w; `9 d0 M .name = "user_led0",6 A% \. Z2 j# g1 Q
.default_trigger = "default-on",
) B& V, z/ s5 K/ {4 T C$ v3 i },- v& Q6 x: ]- `
{/ _6 x- L- ~' p0 G9 }. t
.active_low = 0,
4 D$ r/ f7 k4 h w3 ` .gpio = DA850_USER_LED1,
: V f5 \5 c% _6 i0 B .name = "user_led1",) A' W2 Y5 Y9 L. f
.default_trigger = "default-on",
# Y; C9 @6 p5 L2 E( _: ^2 E: p! V },: _7 b+ R! }) E: a3 ?7 h
{
) R2 I1 ]5 G' u; D, S .active_low = 0,$ ]+ l% a/ L4 p [" r% y, q
.gpio = DA850_USER_LED2,
. ~5 f( f" R% i7 P1 c1 e y$ V .name = "user_led2",
6 F( c; E6 o1 {. }" f& b* c+ W .default_trigger = "default-on",$ A0 v* g. z. \
},$ j) r9 ~6 c0 u1 {, g
{
- z/ t! B: Q E/ e5 W7 B .active_low = 0,
8 ^0 K& d7 }; f4 z. ]4 [' c .gpio = DA850_USER_LED3,
2 r/ o+ y9 Y/ r/ `4 w3 U. x .name = "user_led3",
" T7 [+ b3 J/ t B/ \ .default_trigger = "default-on",& [! a; \: U$ ?- S3 l; E% d% e. P
},
: e9 k2 d, F; N8 f H9 n7 w};( x8 p) D+ g0 ^
! c+ P( x1 x' E4 |) f- N* o
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! z- j: Z% h2 b4 [5 r% t2 |
.leds = da850_evm_tl_leds, `5 ~8 A) o8 A) p n9 h! I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% ]* v6 F: ]7 @; \};0 g1 w+ C1 z I0 l5 v i$ M5 N5 a
, q$ A0 ~% O4 B
static void led_dev_release(struct device *dev); r1 ?/ l3 _% b7 }4 Q1 Z: s% h2 r
{
# L2 `4 a* n8 ?- E, n};
) I$ `; B, Y- @- N! P
/ y$ E/ C" k# \ j# e5 y0 ustatic struct platform_device da850_evm_tl_leds_device = {4 w! S' N2 v! O) G, W
.name = "leds-gpio",' h% y: u9 P" g; ?6 Y4 n
.id = 1,1 d7 u0 E6 h3 A% I5 J5 D2 m+ Z0 W
.dev = {
. d+ l+ B1 K! B5 v+ G .platform_data = &da850_evm_tl_leds_pdata,
& b8 \, o& h! [/ ]1 [' V" f .release = led_dev_release,/ h2 H1 e2 d% }3 M7 R
}
. A- P8 J3 {4 f' B3 p};. W1 `& N. m+ e: y( e* {7 ?
1 O1 Q* c( Z! l i3 E+ g
static int __init led_platform_init(void)- m, v T9 a# g9 h
{1 U. C0 G( a: ~5 o4 L
int ret;
% R$ \# ~" M M5 f! C#if 0
: @ s* i) _6 {; k/ ^4 Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 r0 F* a* H( c( c; D
if (ret)8 o5 e7 ?; \- ]3 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" N3 g$ m( g% ]) `% B "%d\n", ret);
* I2 D* b) t* l#endif! i. Y; a+ @9 A' I# n( U# t
ret = platform_device_register(&da850_evm_tl_leds_device);' M9 v7 ^, S/ H3 T0 O6 I" K6 m
if (ret)# D1 @7 K) D3 k
pr_warning("Could not register som GPIO expander LEDS");( x" E4 J1 `2 O/ F" \' N% @
else
9 |; f; _- _# t+ D printk(KERN_INFO "LED register sucessful!\n");
- G9 [( B/ P6 v0 K5 m
% L! V0 l( s; j2 `- Q& t+ P return ret;3 u0 N& ]4 g. m7 v: k
}
7 z+ K; Z5 w5 f! D/ R# o& h6 c$ m0 `6 i5 r, {3 D6 D# w
static void __exit led_platform_exit(void)
4 n* d% e p1 ]( Q# |5 c" Q1 Q{
) C8 R0 Q j( X# i* e. R platform_device_unregister(&da850_evm_tl_leds_device);8 A; u" D4 t r( t" t
! k, {* _9 S; J printk(KERN_INFO "LED unregister!\n");7 A5 e) L: H* A* _/ x
}( g) B; U7 K9 O# y8 g8 ^
2 @7 T4 @& C3 X) ^& l
module_init(led_platform_init);
x; E6 Q9 P: l; l4 Tmodule_exit(led_platform_exit);9 q: M) k4 z% y' {9 j. [' W- V
# ]% g4 `9 L! m4 ?6 u1 [MODULE_DESCRIPTION("Led platform driver");6 w* L3 Z6 F" t- C: ^$ `8 c C! e8 V
MODULE_AUTHOR("Tronlong");& v! Z8 `+ p( K; V0 @
MODULE_LICENSE("GPL");! v" U+ v; Q1 h' h C
# C' E3 P* X9 ]/ }8 {; `
|
|