|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 |* Q; Y$ z2 U0 g#include <linux/init.h>
! w2 V t4 \% e#include <linux/module.h>
: d+ S& w( s$ l3 T0 O#include <linux/kernel.h>! m/ H/ _. U% `7 F' M& H J
#include <linux/types.h>
) L% p' w; ?- o#include <linux/gpio.h>
& B" t$ ]) C, D% J0 ]: e$ A#include <linux/leds.h>
& ~ i' V1 {) s* D+ Y5 l#include <linux/platform_device.h>
6 X8 ]8 \$ o/ M4 X5 M6 \' a6 F$ r3 ^, T7 \* W& r
#include <asm/mach-types.h>
5 k- y/ X) a, d- M, v#include <asm/mach/arch.h>2 c& F/ y' |9 I) s2 e: A: N
#include <mach/da8xx.h>
8 L# |/ ]% l+ |+ `6 J& |#include <mach/mux.h>
' A$ _+ V8 z' v/ L) W+ D
+ w" a! Z( _4 r* |8 J' K2 i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), j, b# ~' v; |! }2 `! D& d: K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 F" @5 E7 {! d# D" i8 c+ _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 I1 _, q! P* ?8 M5 v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' T6 |0 V, I8 S1 s" F" e [% U6 X4 U2 P3 X0 d4 D" L2 x& n: q
/* assign the tl som board LED-GPIOs*/
% o5 ?9 F3 `. D: }1 J, h$ N8 f" xstatic const short da850_evm_tl_user_led_pins[] = {
$ `! y: G' [, @) J/ k* I /* These pins are definition at <mach/mux.h> file */& X# g$ Q" c5 F% _ L1 I7 F
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( o+ D, ^2 n) v! y r' n -15 `; M; Q) A. K. ?# t
};2 n$ S3 {( o/ G+ f- B; I6 L" ]
: z$ w% S& R# Xstatic struct gpio_led da850_evm_tl_leds[] = {
8 q9 y( _& ~6 n, k. \' E) b% c {
1 k, r- R7 K- _8 u .active_low = 0,, A# S. R9 M0 {4 N! ^- o3 g
.gpio = DA850_USER_LED0,
$ d9 K* ~+ q, D3 D. ]6 i .name = "user_led0"," ~) U* k" j3 ^3 q- @- G* ^
.default_trigger = "default-on",: Q# c) K+ ?- Q& |% l7 ]
},
- F5 E: C( N- b1 z/ M1 _ {5 A) W* C" u- t' l% D
.active_low = 0,7 m9 m1 G* c6 w" X$ |
.gpio = DA850_USER_LED1,
! N7 L& N4 ?/ N: r* R! n .name = "user_led1",
9 Q5 O0 E$ Z! B6 | .default_trigger = "default-on",3 F1 l+ f% J- _ ?9 n( H8 w2 W
},
6 V# m1 p, }- Z( I {
# P2 c( }) u5 |8 ? .active_low = 0,) V, @7 R6 S; b6 Q% f# n/ I, L
.gpio = DA850_USER_LED2,: W( l7 {% k9 b
.name = "user_led2",
% d( u8 W% X" j; g# Y" Y .default_trigger = "default-on",
( ~/ N7 b# A0 i G! |* U3 J8 K },0 l$ ^/ F* L2 k! O
{
2 o$ y9 g/ J4 L% n! E3 r .active_low = 0,+ k3 l6 Q L5 r) T9 }
.gpio = DA850_USER_LED3,4 f" C" R" U5 R
.name = "user_led3",3 d9 j5 s) H! C( u, a7 _
.default_trigger = "default-on",
3 N4 k/ \6 K/ Z },
, q- R! X4 B. @" F. q/ F o2 Z8 O};8 Y( ]+ V" Z' W1 R
: b/ H5 E% n9 p2 s8 \, l. f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% ]- H3 m3 h: {" H$ x8 ^ .leds = da850_evm_tl_leds,
+ c8 \" d7 B8 g5 S/ f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 c2 F) c ]9 W' y. A4 c};2 r$ R2 s" v, T/ w# c) X( e
/ W: r1 @) v5 x! j$ E E
static void led_dev_release(struct device *dev)& B+ u% L7 x5 D
{7 s) `+ o3 z3 k2 y
};8 T/ a' k* Q( b W+ H c# v
/ D4 @8 U( I+ \! K3 @& ?static struct platform_device da850_evm_tl_leds_device = {
" D+ o& |% y' a0 S. L- ` .name = "leds-gpio",
?' ~; y3 b2 l( ^" d2 L* ^- d .id = 1,6 q2 A9 _$ A! f
.dev = {
* Q1 R" `% c1 z .platform_data = &da850_evm_tl_leds_pdata," [8 f2 c$ ?, A
.release = led_dev_release,
4 ^- r/ I: V5 J7 v }. t- ~4 E0 b' a5 c& T- s
};/ a' s: A A' @
& K! S5 r; L. D2 [" c
static int __init led_platform_init(void)1 s! i8 ]% l0 M
{
& y1 i* I4 H/ T" f+ h1 G int ret;
% p$ A* M D0 s#if 0! }3 {% F9 A F) l; Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 v0 b1 a* |% ? if (ret)
$ N% M/ u9 I* T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 Q% f: F; l* o' M( [
"%d\n", ret);$ R2 o1 g: C* c1 S7 ]
#endif
9 w. H" q3 c& Z2 D* \ ret = platform_device_register(&da850_evm_tl_leds_device);
1 t! K, G/ `+ l8 Y if (ret)
8 |7 N$ B+ H! U/ x; h pr_warning("Could not register som GPIO expander LEDS");: X1 y& J9 o( y3 o4 S* b9 E
else5 G- V4 F) C% c( Q4 W$ F6 V
printk(KERN_INFO "LED register sucessful!\n");
: E) c0 V6 W. g Y
% p: s" }8 X" h return ret;: f: G; Q& Q- J, _3 }! k- p0 K
}( w/ ^8 r! F0 D' _4 Q- C% J
$ [3 j/ y8 P0 I0 C: l
static void __exit led_platform_exit(void)" n8 C2 l5 O9 ?8 ~! ^
{) b2 @. e/ J) r& I8 _
platform_device_unregister(&da850_evm_tl_leds_device);
/ ]! ^& G' a8 V. {7 C6 j$ _2 g
; m: I3 J8 ~; F9 N% E* V printk(KERN_INFO "LED unregister!\n"); W) H9 d! s. V$ Z3 ?6 t
}
- V9 @! s$ l$ g
' P4 c- P; g/ V$ g0 ^: pmodule_init(led_platform_init);
3 y) [ N1 ~: i9 |. n' E! Dmodule_exit(led_platform_exit);; O# @% }) ], {0 t# m0 s6 A' ~7 A
) Q& N' z8 A+ b$ J6 O9 {
MODULE_DESCRIPTION("Led platform driver");
! Y6 Z ?# ~ O: u( K0 M* c' [MODULE_AUTHOR("Tronlong");
1 [0 v5 C" D' bMODULE_LICENSE("GPL");! k+ X) f0 h3 p* R$ ?4 ~
C6 B& H& f, \6 {8 B: i4 k* u) P- B& ] |
|