|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 I4 ?7 `1 U8 C. m8 G4 ?- E#include <linux/init.h>4 D0 V/ a9 A# Z
#include <linux/module.h>
6 L6 h" a( i6 [' Z#include <linux/kernel.h>
+ Y- d& z G& d- ^: u5 w" }3 i* F! \#include <linux/types.h>
9 q' e; u: v( Z& p" b5 \% Y#include <linux/gpio.h>
1 G' ]+ x0 H# O8 ~#include <linux/leds.h>5 j3 _: m) H8 e8 w2 z$ ]3 o e
#include <linux/platform_device.h>
+ O* `& Y+ A- A
1 G' H. p$ B% ^7 }7 L#include <asm/mach-types.h>9 H. k. u, F4 Y1 M1 j& H4 b# w
#include <asm/mach/arch.h>( _+ ^3 P# V3 ~5 n7 a: D4 M# W
#include <mach/da8xx.h>! w& |' S* Q' e" R! j+ c, v
#include <mach/mux.h>
, D5 ^% A0 \/ F1 }$ B6 j1 ^
8 I/ s- W$ K d) i% o# F; q' B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' I6 H! y4 F5 U5 }2 a$ S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 r7 b0 p8 v( Z2 ^7 R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 _7 b* k" {1 p/ }* n+ Z6 ]! G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 v4 ]5 ?. a$ K+ P( V# V3 Y. y# y3 {0 g0 n" a3 K) |
/* assign the tl som board LED-GPIOs*/1 j& y6 m$ S1 [2 t5 L5 R3 d( h
static const short da850_evm_tl_user_led_pins[] = {, u9 B5 A3 n+ g& l
/* These pins are definition at <mach/mux.h> file */
( W. r% S# Z' V# l) y B3 u, Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 U% m! O1 Z& T# D2 q: Y5 ^* ` -1; x1 j; k( s' \2 G9 o
};2 ~1 ~$ R& v3 @3 `- ?( d
, W, @5 C% d2 P* D0 mstatic struct gpio_led da850_evm_tl_leds[] = {0 i! t$ O/ |2 p: z5 ~
{
- f+ z$ d L# q; G1 c .active_low = 0,! \; [ Z" U7 p; I
.gpio = DA850_USER_LED0,
. _6 x6 S. X r1 J$ F! E: U .name = "user_led0",- g+ I* ` J4 u3 K# O+ z# u6 Q- `
.default_trigger = "default-on",9 E, H( _8 T$ ?6 B
},( x" A, v* w5 }+ Y# P
{
$ H h, J2 P7 Z" s .active_low = 0,0 Q) _& S# \6 S2 X$ ~4 G9 [- w
.gpio = DA850_USER_LED1,
4 ~, W/ S: [3 ^" P% b. v% ]% i .name = "user_led1"," N" q; S# a" P: m/ ^( f- V* ]
.default_trigger = "default-on",
/ V9 g+ Y3 {: z4 c$ n4 U3 O },
! p" n9 J; w0 `4 S9 j: A+ Y! S P {
2 x5 {6 D/ U+ [ .active_low = 0,0 a0 `: _7 O4 ^$ J5 x/ ?
.gpio = DA850_USER_LED2,
2 h" ^0 q- p, \# K$ F .name = "user_led2",9 s) p% o; K/ B, O6 e
.default_trigger = "default-on",
% D [& Z& l( ?& r- P },
3 Y+ l+ b+ u3 _) T# n& {! u {
$ Z: g1 G5 t$ ~3 U9 D* b4 x: H. l .active_low = 0,
. Y, X; M6 e6 i+ w( O .gpio = DA850_USER_LED3,; `2 a5 o4 Y! E# q8 C( M8 D7 r
.name = "user_led3",
1 [& J. J, D5 R! ~ .default_trigger = "default-on",
1 a2 S' Q+ k& l },
0 @! }5 e7 t( A! `5 L5 i2 L};1 }' K5 Q( Z3 r8 l' v V' p3 H' y
) k- {' \( O) i* R# Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( Q! `+ E7 { w .leds = da850_evm_tl_leds,
/ v8 o- P& x% V+ F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 J2 J: `% o' ]+ V( f& Z: E
};
% ^& ?2 A! d* u/ s, W( t' Q2 q; n9 H6 ?: g3 a
static void led_dev_release(struct device *dev)
! h5 ?: G- b, _1 Y) ]{6 P+ l0 b0 N3 e K& |
};2 a& {2 d ?- P9 Y- H! n/ f4 E
# @7 V& E$ {; _* T+ T
static struct platform_device da850_evm_tl_leds_device = {8 Z% A3 S }2 \: E* [) h1 l
.name = "leds-gpio",
$ k3 `5 d7 u, t' [- s% g$ M .id = 1,
) |8 C# O' v& s6 Q& q/ a5 \ .dev = {) z0 l1 C9 f8 ^" x" M! f
.platform_data = &da850_evm_tl_leds_pdata,
9 l) o! s* } _- J9 F5 \& Y' Y& W1 t .release = led_dev_release,
9 R0 p! _1 [0 l ?4 J$ `7 n }
' a( h5 \- I( A4 M};: F; X0 z& ?9 E2 E% l+ x0 @
: z9 l, Z* n" \
static int __init led_platform_init(void)! D9 i! ]0 f. e1 o; ^ U& i
{
* j' O' _$ X- p int ret;1 M1 g- f. R# u0 X
#if 0; H- f; ] K9 j7 ~/ E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) L0 N* q7 {: {' E; G: F4 e- Z/ S if (ret)* ~ O+ X( _; J/ y4 S* E4 W2 D8 M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' F* \; V7 c6 C; @& g
"%d\n", ret);
4 @# B/ M8 n( S8 b! i+ |1 V#endif
) m* c* D7 a; N8 u ret = platform_device_register(&da850_evm_tl_leds_device);
6 g0 f2 Q1 ?4 S if (ret)
( b2 d- ^; v- @# w& a+ O$ J pr_warning("Could not register som GPIO expander LEDS");
# x. x" K8 O% g4 u! y9 U( E else
4 W( l9 u) I& b5 _# P printk(KERN_INFO "LED register sucessful!\n");
/ K7 y K |4 ~8 U) I: U
* ` C% F* \6 ^. | return ret;4 V2 q! Z- p9 Q
}
" Z5 |# G# D7 [- T7 s/ H8 F5 ^) `5 Z9 n* Z: R7 m {
static void __exit led_platform_exit(void)# X. u: q% u1 f* b& c
{
9 z$ O; s2 G0 |, J1 N9 v! n# ~' ? platform_device_unregister(&da850_evm_tl_leds_device);
J3 |7 h" l: ~; d M; b) d8 v. [: ]1 L N$ {. y- [, X
printk(KERN_INFO "LED unregister!\n");
- v( Z1 N) z3 H* S5 o}2 k$ }$ s9 e; c
$ P0 R3 [2 M% _6 \. e5 U
module_init(led_platform_init);; M1 M- \. ~% t/ n& [7 q. u
module_exit(led_platform_exit);
8 W) Z1 s( O0 `$ J$ I6 ]4 j' t0 ]( w
MODULE_DESCRIPTION("Led platform driver");9 T. ]- k4 M0 l+ B! k$ T
MODULE_AUTHOR("Tronlong");! Q3 V1 F* J2 l/ }# v8 n2 b& M
MODULE_LICENSE("GPL");" N: J5 C% n2 \7 v) ^' ^0 \* H
& w J2 a3 v8 l6 Z1 R
|
|