|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 ^; A! u1 h* `% c- `5 r
#include <linux/init.h>
% K. y [- W- S* l" U( @" \#include <linux/module.h>
% F) [8 o+ \' i1 f( |#include <linux/kernel.h>% u3 |. h- L7 n
#include <linux/types.h>) a, i3 v* G s# M
#include <linux/gpio.h>
2 x1 V% _; O" O#include <linux/leds.h>
0 r0 X& u& A7 d4 |4 e#include <linux/platform_device.h>: e& m! E, ~' H) c# y
& e# e: y5 ?$ Q- f- P- J! t% q#include <asm/mach-types.h>8 G# c+ L) O, `
#include <asm/mach/arch.h>
* @+ r6 O2 h5 G2 K#include <mach/da8xx.h>
( N8 a) \; ?! v#include <mach/mux.h>( k% j, k, s( {2 ~5 M
7 a. o0 K) h8 E8 k5 j7 c" r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: b3 j4 `3 G! \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 t8 u# H U3 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( W% z- u3 O, p" p; t5 g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ v; `5 Y7 k# t* j" V6 ^+ {* J' y h9 y/ N; e0 z" [! v$ [) g+ b5 s& ^ w
/* assign the tl som board LED-GPIOs*/
7 N6 y' M; _6 ]0 `1 M( ^static const short da850_evm_tl_user_led_pins[] = {
; n- {' N/ x3 d /* These pins are definition at <mach/mux.h> file */2 H- S# U! ~& I% y1 U6 V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 \0 i* N8 [6 a" i+ a6 q, w" q. Q1 X -1
Y: {) ]6 \' l4 q};' L/ F: [$ ^; P9 e$ j
d& W) {5 X/ s
static struct gpio_led da850_evm_tl_leds[] = {
4 w8 o+ i- `/ p% A$ P6 @ T {/ K' C g# N! D0 R& `3 D' P" l5 p
.active_low = 0,5 m. _+ b5 V! ~/ _/ L
.gpio = DA850_USER_LED0,4 f( d" K1 w7 i* b; V3 z1 R. ~" n1 X
.name = "user_led0"," d- F1 g& f! M ]( G
.default_trigger = "default-on",: \- B, T3 E8 W* f/ G. C7 V* X! \
},7 v$ h. O/ h6 w& V0 i' ?2 E
{
3 o) m! M3 w5 \6 j9 g' N- X .active_low = 0,
- }& ?/ ?4 C5 S, Z .gpio = DA850_USER_LED1,
- }6 C |3 y- k/ R! h .name = "user_led1",5 G- `+ @# |9 n8 i! O; M
.default_trigger = "default-on",
1 `+ `( J& \, Q4 M' a6 @ },& d# X, f; v- V) R$ d2 e" C
{* v4 D3 c3 @. M. G W6 A5 N
.active_low = 0,; _6 b: g. k! p |/ |2 j
.gpio = DA850_USER_LED2,# k, J( L9 s! z
.name = "user_led2",6 J ^ { X% P* w/ r( F! g
.default_trigger = "default-on",
8 W( f9 [' c+ }7 X9 X2 Z" {6 O }, C# D0 K; d+ c
{- `" |' b S7 v; _( s' c! v: r
.active_low = 0,! c, w) j/ n; A3 o5 c7 w3 U: M
.gpio = DA850_USER_LED3,
3 v; R" p* p/ v/ ~- ^: j .name = "user_led3",
! L& n; e8 `; H+ U9 T& W( K8 q .default_trigger = "default-on",; N$ J! t. \, \8 q7 n: E, n
},
1 m5 M Y, G( J6 o, @+ t};0 r; O1 {, I: u G; g
% ?' P; R+ ^- P! w$ E3 ]4 O5 tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) E9 V, J9 `; B2 q .leds = da850_evm_tl_leds,1 `8 Z4 s; l. ~- [; ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, N) E: [& c; K9 m! p. B};6 m. t; I: w4 j8 O9 B2 ~# p
. |" I2 A/ k& V1 g* e4 Jstatic void led_dev_release(struct device *dev)
) p/ D3 S# p3 N# N/ y% P" _{
. G Y& {- P& }8 a5 |};2 P6 s5 W- g# @8 @+ ^" V
n$ ~3 b# D. t& }3 t+ z0 hstatic struct platform_device da850_evm_tl_leds_device = {# _3 X' r+ j+ G4 k: ^* `
.name = "leds-gpio",1 I6 o! x* U7 S2 q" ~+ E4 S
.id = 1,
* O9 \: R d' R, K .dev = {3 ~. C; X) n2 x; W9 A3 d' n
.platform_data = &da850_evm_tl_leds_pdata," j) \/ }) R: | \* H% a, J
.release = led_dev_release,% A3 A; _; [+ u
}
5 W! i! }0 g% S! [};
. \$ ]$ b5 F: b2 N0 z3 d4 U3 a$ x3 ^" {8 v
static int __init led_platform_init(void)$ N) R9 r+ K$ u/ n9 S4 c' Y1 K
{$ @* j# j' N1 s" q9 Q: V% j
int ret;0 @$ r5 x9 a5 x* C9 V
#if 0
+ A( _0 Q$ N+ ~% M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ O) u1 Y6 F8 V* c: y8 Z6 D: ^ if (ret)
1 i" ] j5 j' i: D7 \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 L7 O6 R$ R2 S2 `4 f3 S# T9 ^ "%d\n", ret);
9 g2 K. f. T' P- w v. q#endif+ N' U3 y8 c; J2 L/ f; x/ ?
ret = platform_device_register(&da850_evm_tl_leds_device);
/ o3 g0 ^: t( j& r if (ret)1 |' @4 S' r9 @4 K5 ^4 p& o2 m) c1 B
pr_warning("Could not register som GPIO expander LEDS");
5 [' T( J9 l% w2 y) v$ y( ], n else
5 I& ]* [. V/ H) ?- j printk(KERN_INFO "LED register sucessful!\n");' _; N6 b9 y4 [* k% F0 A
9 R% V5 N& ]: c/ N$ d return ret;; F: v5 h' g" _1 g" H( p$ e
}5 ~1 P- M4 u. [! S7 p Q1 {
, b2 S5 i& t3 `( Y: X; t# v/ q K3 h
static void __exit led_platform_exit(void)) C5 W" a ~' ?3 d {
{2 B( J& u0 L+ J2 _3 Y' n# A
platform_device_unregister(&da850_evm_tl_leds_device);
- W7 E6 G4 H" Q% y7 {, ~0 z+ g( \6 z7 o8 y4 o# i: C
printk(KERN_INFO "LED unregister!\n");, E: \8 K2 d) k( l* G2 I
}+ M4 l0 L* p" {# C( O
# T/ k5 n: T) d
module_init(led_platform_init);
$ p' c2 }) k; R/ V& Amodule_exit(led_platform_exit);1 c+ z! p% R( _% T6 M
* c0 g. I9 x g1 X* r8 m7 KMODULE_DESCRIPTION("Led platform driver");
" {# J) K( K9 r! ]- e$ ?% j/ NMODULE_AUTHOR("Tronlong");" r; _# P6 Q5 Q. P/ S: r G: j( R
MODULE_LICENSE("GPL");
* f1 r. a. W! Z" }4 C, Z: S* [: T6 a4 C: F2 \" M: k7 v# y
|
|