|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# O# B8 a. ^. w( ~2 u
#include <linux/init.h>
( x, o7 [5 J- @/ t7 e#include <linux/module.h>4 A9 X D3 d, E! q I+ L
#include <linux/kernel.h>
' s' g+ a9 g" ~& S* f% q#include <linux/types.h>
+ v, h/ [" h3 t! ?* r# l0 e1 u#include <linux/gpio.h>
! y1 O! H4 T( y$ g g, N' w#include <linux/leds.h>1 @/ s. W3 B0 T* B T5 p7 s* j/ T
#include <linux/platform_device.h>4 R2 q6 u& y( w9 |
j& a9 R! g$ D, J
#include <asm/mach-types.h>
4 u! o( {. W* C$ L5 q' @6 D& y#include <asm/mach/arch.h>! j( R- q6 g$ E. K( h% k2 Z
#include <mach/da8xx.h>
! Y5 K! a& A1 K# d& g#include <mach/mux.h>- z% H0 [6 |- O' Y5 ?
* ?$ i5 }/ y! n% V: h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' h+ @% k' s! n, g+ T" E- W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 x; A+ C, p5 {0 @ q; F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 X- _" O6 F* c# X. O G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, q+ l+ a" a! y" g: a* y% X$ a4 S9 t6 h0 j
/* assign the tl som board LED-GPIOs*/ W( ~7 h) S/ Q- A8 R
static const short da850_evm_tl_user_led_pins[] = {6 j" W8 Q* _5 Q6 h n+ d2 t
/* These pins are definition at <mach/mux.h> file */
$ I* l3 h" ]- w& i2 Z$ F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) G# u0 A( i1 @5 O7 S
-1
* v ]( j0 e0 S3 Z' [& x( j7 P}; v3 j. ?$ d2 c4 e; X! R
0 v; B$ P9 f5 istatic struct gpio_led da850_evm_tl_leds[] = {
/ |9 t1 X, I. Q4 p {
8 p) K- m: c9 K .active_low = 0,
" ~0 e# b/ ]& ^& j0 E2 R0 ` .gpio = DA850_USER_LED0,
& t {" h! Z% [8 @% B. q .name = "user_led0",
/ d& A4 O7 k9 ?3 k .default_trigger = "default-on",
: w- }" {* h- V8 k) {1 y5 _: x },6 z4 p, K' d7 M4 }1 K$ ?' r* i
{0 R4 ?$ z/ C& @1 q/ O* l: q
.active_low = 0, \0 z- o& }5 t( A4 _' {$ I
.gpio = DA850_USER_LED1,4 @( }! Q' Z. d0 D4 E
.name = "user_led1",( z$ y* R; i4 k5 H9 I
.default_trigger = "default-on",( e3 L* z. `/ |, e0 U Y# w
},
, @: [2 c& M' K! { {
1 C2 Q+ D- [! ?7 Q6 N .active_low = 0,9 t3 e& [1 e6 c' j, @
.gpio = DA850_USER_LED2,
' G2 y p+ o9 j$ T+ x5 V .name = "user_led2",: Q4 T j! Y2 W( f( O/ v) H; X: z
.default_trigger = "default-on",
7 |7 g6 _3 |5 {" U/ ` },
3 T* n! P0 A4 F6 q9 m8 u9 |$ b- { {
5 s6 b( k6 o% `7 {1 r7 E; I .active_low = 0,
+ l0 |" a# d! j. C8 _1 U% O .gpio = DA850_USER_LED3,2 I$ p* \+ b- L1 Z+ f; t) G
.name = "user_led3",
% n% ^# a' J0 f- G; F4 o .default_trigger = "default-on",
6 A' V7 W- a) l7 }, k9 z },' M( F5 D M+ R" X
};6 s0 e4 u2 Q' M7 ^
4 B! F5 Q% g3 \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# U! K9 U5 d0 z% s! V .leds = da850_evm_tl_leds,
$ t! i& f G& O& ~5 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ j$ j/ o- F& q R* Z3 p" [};8 q5 [, Y" M/ P
8 }+ K1 I7 ]% S# estatic void led_dev_release(struct device *dev)
2 O- ^' X( _9 O }/ P/ }, P{
9 [. { ?* V5 s& B# A};
- j+ K9 w& {8 }7 d9 b; Q
/ M2 q& l. ~' c/ ?4 w. h P. |static struct platform_device da850_evm_tl_leds_device = {& P: p+ P5 o4 W, }( t
.name = "leds-gpio",
P9 e, i' g; X+ Q% V, s, K) t- ^ .id = 1,8 q8 j& P% X6 \# |4 I' d
.dev = {( L4 R3 t1 o% J6 `( S4 S
.platform_data = &da850_evm_tl_leds_pdata,
& L* v& v8 ?. H$ \ .release = led_dev_release,
5 n; @& ?) k4 ]$ i! p }* b: ?4 m6 s$ N" D; D0 U/ @
};
+ v: N* x0 e4 S- c
! W! k% d% X5 ?0 P8 }/ c1 t+ {static int __init led_platform_init(void)
k4 c1 l; S/ o$ Q9 R{
' B# s5 f) b& Y( t8 }9 }4 B int ret;
8 Y; N; N. r2 p v7 F d#if 0
" U& G/ a% R$ T) H' `. P3 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 I0 I2 U. f. o9 B9 `: Q8 f$ Z if (ret)$ h/ n- ~9 l- e6 r7 a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ m0 Q1 e: j0 T/ v0 i6 v" L "%d\n", ret);9 r, P4 b. K4 ^% b
#endif/ a0 c7 P3 M( M3 k
ret = platform_device_register(&da850_evm_tl_leds_device);1 h2 ~- o/ A) i% U7 n: O# |
if (ret)
" f q6 ^' T. W pr_warning("Could not register som GPIO expander LEDS");
' u% O/ ~# j+ y7 D- ? else
- [+ n0 V' i% l- l. w printk(KERN_INFO "LED register sucessful!\n");
/ z3 r: z- |; f, w0 T f9 r
2 {) A9 e, z6 ^$ q9 W F8 X7 S return ret;) A: d( o% v' J" v( Z, N* o) @
}; @% H8 w' A' z5 b
% ^' m: m1 Q( M
static void __exit led_platform_exit(void)
3 Q9 t7 B1 _2 g' J4 g H1 F9 {{( [+ I1 Y' L/ h2 c7 s
platform_device_unregister(&da850_evm_tl_leds_device);
/ t t: e+ D) L8 T" p" E
# G7 ^/ _. w3 Z/ T4 n printk(KERN_INFO "LED unregister!\n");2 Y0 h: R4 {* v
}/ y2 i) t$ _& f
/ p2 D# t" f' D8 y' U) d Q+ D
module_init(led_platform_init);
, J9 @2 s1 m# c: Smodule_exit(led_platform_exit);5 E; @& s' N, h" D2 I
8 T ~; }0 Y2 \
MODULE_DESCRIPTION("Led platform driver");
# v: f: K' L g6 E2 _- H/ e9 MMODULE_AUTHOR("Tronlong");
, X3 ^# C: b) mMODULE_LICENSE("GPL");
+ S6 K& N/ v$ `
; I. q' f1 B# Y! [: s% M9 D |
|