|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" f) U; j D* ^* B$ F2 n
#include <linux/init.h>
4 e+ G& O; w' d, b& O#include <linux/module.h>! Y4 r3 ~, P- [; [8 r: V
#include <linux/kernel.h>3 R# V; @/ p" o2 k" v. e
#include <linux/types.h>3 t* q, V; P: ?, L
#include <linux/gpio.h>
/ k3 l1 |. O% }8 t6 I# Z' ~0 k#include <linux/leds.h> ~+ _/ _ V2 N/ `. N4 D
#include <linux/platform_device.h>
, ]+ q& ^& @, d" l( M: S. n
/ x( Y A5 m# e4 k3 a#include <asm/mach-types.h>3 k7 E4 j# N2 _8 h/ H) t
#include <asm/mach/arch.h>" b$ H, g: k0 Z' C
#include <mach/da8xx.h>( R: h5 y0 y! z2 K! Q; V
#include <mach/mux.h>
7 L/ J, y5 \6 [8 {9 \
5 @6 D/ Z$ j- ~/ j4 ?$ |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& D' ^( {8 t4 L7 G" w' v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ T- ]* R. T, s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% E* W! q7 x) C" F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& g) M% ^/ F* A. r/ J5 `( x- d
% B. \1 w+ n: l8 ~9 d X! H9 D( M* {/* assign the tl som board LED-GPIOs*/) ^0 p; x' j! [8 m& o+ b
static const short da850_evm_tl_user_led_pins[] = {5 b) y: i* {! F% G; A& T& f
/* These pins are definition at <mach/mux.h> file */7 L4 a: U( V' L# P6 Z: ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% G; O! f0 ^3 o. L -1, y- B7 ^0 q( g8 J4 k+ H" H; i
};
0 Q% T0 T/ J7 _: ]9 V* E4 s
# | h3 ~. W2 C. ostatic struct gpio_led da850_evm_tl_leds[] = {' M$ m& x8 |5 } ?3 e$ b
{
% K3 M8 V0 U0 Y .active_low = 0,
: ]. A/ R. ]6 X$ J$ o- ~$ G .gpio = DA850_USER_LED0,) e4 H. z& `0 J( X
.name = "user_led0",
/ b' x' D, B1 E5 u, H( f .default_trigger = "default-on",/ e: k' o a: A' W! P' F
},
0 W& @6 |+ e; T# J {
$ }" x! C; c9 O' p7 m/ n .active_low = 0,* w& H+ f n8 \
.gpio = DA850_USER_LED1,
1 k- S7 U7 F. n7 \6 l, @ .name = "user_led1",
- \, C& b ~4 T# n# O; c' T5 G& y .default_trigger = "default-on",+ a# o* ~. L4 l+ ]4 c. a0 h+ I; y6 Q
},3 u1 A! i4 E) N5 F8 ]
{3 V* b1 J' H% g
.active_low = 0,. g$ c/ M% t, y. W/ S, E
.gpio = DA850_USER_LED2,% n" A1 R, q8 ?4 Q) M
.name = "user_led2",
0 x7 H5 [( |1 c0 c }5 ? .default_trigger = "default-on",
) ^4 @3 m; I2 ? },
Q! d3 H, x1 g) ` {2 X+ f. q! ~- D7 d
.active_low = 0,
8 M u( p3 a6 i2 o5 y9 H) J9 I% u .gpio = DA850_USER_LED3,; N' J* B4 z" N3 W! m/ s3 ]: P0 Y
.name = "user_led3",
/ l: k" e+ C: x# f$ j& y .default_trigger = "default-on",
1 G+ B: [/ O+ y, t( R },1 P" q' `* ~; v( {3 P: F6 o
};! f4 Q& Q p( V( P& [' N% S
$ k1 F% t. M6 _+ X2 ]6 r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) t1 v* I' n, j& W! f( ]: S& @
.leds = da850_evm_tl_leds,
2 q6 R7 p' Q, j, L8 Y r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- K8 p* x% o {7 c# m) z1 M
};
$ C9 S. D' Z' E1 \- ~9 d0 ^0 _, Q" I w3 ~0 d
static void led_dev_release(struct device *dev)
8 y4 M2 I! b0 j5 A6 m- N; R{
1 }) P# k8 ^0 C; s# ?};/ b, o- {2 h0 L: u+ l9 g1 C
# @% {. |$ b* X$ k
static struct platform_device da850_evm_tl_leds_device = {
6 j' i A7 b2 y .name = "leds-gpio",
- F6 h7 @* I' A .id = 1,
" N; x3 S! e$ z! N0 j8 G+ B .dev = {
& ^5 D; F+ o* U {0 D .platform_data = &da850_evm_tl_leds_pdata,8 f/ N) B2 r) O u( r
.release = led_dev_release,
* o( O& L! Z! |) H5 B' b4 N4 t ^/ L }5 Z6 ~0 }! B; w2 h
};
G- M+ B; v0 S4 p6 O; k) [
) B$ e, e2 K: Z% S8 }static int __init led_platform_init(void)
6 M8 n2 g9 ]; p! w2 U& j{+ R/ S" {. r6 [4 b0 N
int ret;9 v. F8 G: T2 w& z6 C+ G
#if 0
2 U: ^% _( L6 o! u8 q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- t7 l2 L1 O- Q+ _ if (ret)( u2 D3 y& R8 w+ v. l2 l3 { ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* \4 w* k8 r# q) }0 d6 y
"%d\n", ret);
/ J H' y- m* k. p; { o3 Y#endif2 |+ n, A3 Z* A3 X) x. O
ret = platform_device_register(&da850_evm_tl_leds_device);
" \( k- s: M5 z& X# q* S D2 d if (ret)
]. O( A3 A& ]4 O4 m pr_warning("Could not register som GPIO expander LEDS");
: r) L t6 a5 n else& r, X3 x- ?4 @% T/ ~. N
printk(KERN_INFO "LED register sucessful!\n");* v, q0 r! v4 j6 T
6 _$ ]+ F- S G# z; ^
return ret;4 n; f5 e7 z7 W& b
}
" O+ C$ Y5 A8 A6 l, t
+ ?9 v2 G) {3 z5 F$ c c5 Gstatic void __exit led_platform_exit(void)+ H. ]: F0 z4 t- u% E1 n
{2 [0 D8 a. `( {
platform_device_unregister(&da850_evm_tl_leds_device);0 u( q' C) s' e, c: S! K# r R5 _8 O+ A
1 }9 Q% \& ~ H( G
printk(KERN_INFO "LED unregister!\n");
! ?) a1 ?( n: r8 y3 A1 @) U}% ]6 z1 T: C; u9 n0 Y# o+ y
- L* `4 b5 A- Q4 O0 j2 jmodule_init(led_platform_init);
9 `( m5 B/ F" U, W6 T4 \) jmodule_exit(led_platform_exit);
' A2 W6 ^1 _, O1 k" Z7 j5 t8 g! |) O$ {6 | d
MODULE_DESCRIPTION("Led platform driver");, c! q5 q! ~* \- I2 ]
MODULE_AUTHOR("Tronlong");( |( Y; N. N" ~
MODULE_LICENSE("GPL");% s" k/ G* D' o4 B% [; [
: B, D0 t, c7 V0 t; H |
|