|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 K: {8 e1 N: O. e8 |/ }1 z- j
#include <linux/init.h>
5 [( k* k% P/ }# L$ p+ K3 h% _#include <linux/module.h>- y. Y+ a( S7 Q
#include <linux/kernel.h>: D% M* ^. C7 f# n
#include <linux/types.h>2 ~* a% k, p: I8 H2 ^
#include <linux/gpio.h>
- J% L3 q% K! Y, c#include <linux/leds.h>! B; b$ @, \ a/ M) o+ s
#include <linux/platform_device.h># |) `5 P! T) A
9 _( V, s6 H0 G" L; ^( w
#include <asm/mach-types.h>
: p( w' b( d/ a: K#include <asm/mach/arch.h>
: t* G, D" u# @3 s( W' e; Q% }#include <mach/da8xx.h>
6 p4 P* M5 ?; Z0 @& s6 Q4 u* z#include <mach/mux.h>
1 _, I6 N/ D( x; x
4 W# I/ b# B; ]1 d$ M; I9 E" R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( ?# i' K% S" N/ f. N1 e; q$ q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ k7 x6 L( K3 y6 \& t$ U9 j7 A7 E7 Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): z4 e- M4 Q F6 J" \. @# S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- ?- T4 v: T$ R3 s' g* r% V) t* G \, `9 Q
/* assign the tl som board LED-GPIOs*/
& k, b5 ]5 D0 F) L! O: ystatic const short da850_evm_tl_user_led_pins[] = {
7 Q! A+ P4 b+ @* W0 J /* These pins are definition at <mach/mux.h> file */; q- l- ?/ x p! c& x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! s9 {! [8 T4 W# C! ?; z+ W
-13 U+ Q5 t" r& R4 s+ S5 m; d- K
};% P7 |7 T! z# m; e* o: q3 l
$ \6 l- T9 x# p& rstatic struct gpio_led da850_evm_tl_leds[] = {' ^% u5 k3 H1 _7 L' b& V* b! N+ j9 }
{
% A; d" P: T+ v8 F .active_low = 0,% x# t6 f# e! O7 n& R6 k/ z Y
.gpio = DA850_USER_LED0,
+ b7 q- h0 r+ j3 C .name = "user_led0",. P. C' y9 p. O( B- T
.default_trigger = "default-on",/ ]6 T! e* w% G7 c1 Q2 ~9 h' `" N
}, ~$ b6 t8 K8 a$ t& y
{) d, d1 c! x; M$ U
.active_low = 0,
% u8 H6 v# c! l; d4 C" p .gpio = DA850_USER_LED1,
* ^' ^0 j6 Z( s9 J. J; Q" p .name = "user_led1",+ V7 l0 i# A$ s) X. L
.default_trigger = "default-on",3 R& ?% O3 y9 n) d) C& \. d) j1 _/ \
},; I. |9 M) H6 B
{
! A( Z! L9 P7 Y$ s6 l .active_low = 0,
1 U2 r) E' ?6 D% R) } .gpio = DA850_USER_LED2,9 V) C& K2 \# s: b6 \- e7 J% Z
.name = "user_led2"," t5 p, z: `; Y: A
.default_trigger = "default-on",0 q/ o9 B, H) e& C g
},1 L {; K* \ N E$ e6 ^5 v
{
: x" F* z6 L# W! Z& k) V# j. C4 K .active_low = 0,
. }5 _' [5 k% Y0 C( W. r .gpio = DA850_USER_LED3,1 N7 E2 K2 ?; D$ F j2 Y. m, {
.name = "user_led3",
" B! ?! M# Y ?: W1 m2 |* U .default_trigger = "default-on",
' m4 S5 C1 Q8 V4 Z. T% s8 w; ^) v },
T/ Y5 v; V5 z2 C0 s};7 D9 b: j* y& J! D/ B6 Y; Q' C: H
/ S/ _" J& B; ?8 V" v& V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( O5 t3 ?, v7 S5 F6 Q$ g1 P .leds = da850_evm_tl_leds, J- i: b& w: d0 j2 Y$ j# {7 s$ m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 y7 H, r+ C% h7 T7 y0 k};
" I0 g& }. }6 s+ F9 b8 ~0 q
- b' d" l, N; L8 v; ]# r7 Pstatic void led_dev_release(struct device *dev)
' J7 H& {9 W) p/ U. a; H{
3 k8 G7 T. M! ]};
' H7 o% r7 G/ L. t
3 U( z# a8 ?; D! s% U3 h3 Astatic struct platform_device da850_evm_tl_leds_device = {+ G# K2 ]+ g* b* @# m
.name = "leds-gpio",
% _ v* s, w! {5 q" |, ^ .id = 1,
3 V$ `$ N' }) ^' |/ v .dev = {
% h+ @" h& n2 F6 R* M- V% C5 g .platform_data = &da850_evm_tl_leds_pdata,/ h4 w9 x! Q; [* O4 Q, }
.release = led_dev_release,1 A( Y& [9 L4 i+ S5 s; X/ u; z
}% }3 x' @7 a9 B5 i' \( P( o
};
9 T$ J% V6 x# M e2 N
: Q. C3 X/ ^5 W3 t6 v v! gstatic int __init led_platform_init(void) a; W4 O! h( B
{
' A- {- D* t. J; X int ret;& C9 K& E1 w4 `2 k1 F9 c
#if 0
& P. H3 V @; ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 M& ]% W$ `1 d/ d7 Q9 A# | if (ret)
. V$ L5 o/ v4 f6 B# K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% T% N) y4 W. Y, s8 x2 {9 n
"%d\n", ret);
+ i# A& i9 Z, E+ I#endif! J8 @& ~2 n* o1 x0 U% p1 c. J
ret = platform_device_register(&da850_evm_tl_leds_device);7 x2 {' N" U& a# w
if (ret)
2 K7 ~+ }0 S3 r+ { pr_warning("Could not register som GPIO expander LEDS");
1 W& {- E/ X$ ^5 _$ u else
0 J7 X6 v+ q* O7 b4 F; E printk(KERN_INFO "LED register sucessful!\n");
" }; a4 l! @9 B$ v% y9 f& j! Z! @' |) p
return ret;
1 ~* B; \3 I: p+ c/ a* j}8 ~6 d0 I$ B8 _' V: Q
# n; r+ @4 a! L/ D/ I2 {% ostatic void __exit led_platform_exit(void). v& F0 g4 K' F7 {; p
{' C: c, B ` s
platform_device_unregister(&da850_evm_tl_leds_device);
7 _% g& w1 ~' o/ U
$ v- D% V/ ^& E4 R printk(KERN_INFO "LED unregister!\n");: i ^/ l/ k" Q* g2 A
}; }1 e% T) z1 I+ t
2 ~1 A; z: s- Q
module_init(led_platform_init);
7 [: x- K, \0 Vmodule_exit(led_platform_exit);7 j# }7 A# y! V3 y5 @
* U, v) k8 K6 h" z9 L% H; }
MODULE_DESCRIPTION("Led platform driver");) p5 v* j) L4 `+ Q: F
MODULE_AUTHOR("Tronlong");
& d3 `: q! d( s6 ^) A& hMODULE_LICENSE("GPL");, s# {0 y! l# k& j' Z
2 _. _" C) C# {9 o y8 [
|
|