|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 y) J8 W8 u7 Q. Y- Z+ l! F+ E
#include <linux/init.h>+ \1 |) x3 R. O" z- V% D6 c
#include <linux/module.h>
- b0 b2 P4 z( Y1 i* i5 ^% D#include <linux/kernel.h>! H* ~2 c1 l( G2 |, b
#include <linux/types.h>) }$ B4 c( `8 P. T% B6 g$ B
#include <linux/gpio.h>
& L9 j- [; y2 p" {#include <linux/leds.h>, F f9 N, W& S' `5 r5 n: u
#include <linux/platform_device.h>; W& |9 ~4 B/ I
% k. O" G* [" ], L" p#include <asm/mach-types.h>/ A' |: B* J* E: m) g9 o1 [2 @
#include <asm/mach/arch.h># F+ p2 i6 p& K- [2 |* d
#include <mach/da8xx.h>
& d$ ]. a+ g+ L3 \#include <mach/mux.h>' e7 _& b2 a! ^9 n. V
* e3 o0 }; |# ~$ [: k/ q* T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. T: d. U. l8 j6 }! a) W' ~3 [3 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ U4 I; E- j4 I! H& f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& \( i3 A. Y5 n4 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 k' h; e3 O) j, z( g+ c0 e2 K. b) i
/* assign the tl som board LED-GPIOs*/- V8 A4 c% @1 q3 I3 _& J7 x
static const short da850_evm_tl_user_led_pins[] = {
: B# Y' q2 Y# {9 q" U4 T /* These pins are definition at <mach/mux.h> file */
* @/ s1 u' [6 ~" G/ L% z3 x* e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! B# | p2 z6 }7 T; a
-1" f9 i4 P6 j7 ?5 u) Z/ B
};/ u7 Y. X! K6 Z, B; _# W1 c P
3 x0 R9 f; ?. c1 s( q: o" a* `
static struct gpio_led da850_evm_tl_leds[] = {$ J; n& M# p% o3 o8 u0 O
{
5 X }8 K) `: W2 @ .active_low = 0,
" e% `! r' [$ i4 L' e Q/ } S% p .gpio = DA850_USER_LED0, Z2 v: D+ d; O' V9 a
.name = "user_led0",
3 H/ W0 a2 O* U! X6 {- d, _ .default_trigger = "default-on",
0 m0 p5 y1 ? e" o },
' J! x+ V: X" v8 w. t! |- ?5 \ {1 H7 Z4 e; L! R0 `" j9 ^
.active_low = 0," u3 v5 W' H4 K# A) Y% q$ G7 ]
.gpio = DA850_USER_LED1,
$ O$ a1 R' k; ^$ y7 i3 x .name = "user_led1",
" R! a! [2 m- d3 M( c+ D .default_trigger = "default-on",2 F+ J p6 d, p$ N+ @: ]0 i" s. T
},
# U2 g" s, p9 f- l% r5 |6 q {
7 C+ I0 Y% z0 q5 [; F8 ~+ l. ~ .active_low = 0,
9 @( R: n7 g) N. t e6 A* v .gpio = DA850_USER_LED2,
$ [# j/ F2 s: v .name = "user_led2",
0 X" z1 n$ T+ @6 f8 r9 m .default_trigger = "default-on",# A0 Z! c4 e5 f3 M9 S$ {
},7 A7 f9 v* B( \/ P2 o, F
{0 F% W ~3 L3 |
.active_low = 0,
* p/ A( k$ q0 J6 R( b- t .gpio = DA850_USER_LED3,
8 D1 E0 \/ m$ x .name = "user_led3",
: o# |4 `4 I2 S: _- B' ^8 ] C9 I .default_trigger = "default-on",! `& y( F& X' w2 x9 w: A7 ]% j E
},) d4 g8 o, O9 A2 x+ n
};/ ^6 \/ ]% j4 u& A$ j6 l. S
4 E# f4 O( m; G ~$ C# _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 C6 h' r( e0 m, e: {
.leds = da850_evm_tl_leds,5 H! ^1 Q2 e9 i8 k7 l G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 i- U* o# j! R
};
$ q2 f, v; r6 b) c4 U3 u/ Q/ j% a0 j# O$ N# G
static void led_dev_release(struct device *dev)- y, J5 r" Y# r8 g( n, ~, A; y
{
$ F. z" h5 Y& x# G! N, F3 w/ o};
) I/ ?2 K5 I9 N Y/ n; Q# r" W9 E9 f& q7 y
static struct platform_device da850_evm_tl_leds_device = {
l- e: G$ V/ X$ H" F .name = "leds-gpio",
% J2 _: T, O; V( ^ .id = 1,. }5 B, a0 R( y% [$ K! x, Y5 S' r, E
.dev = {- g* r3 @4 f9 Z% \$ X
.platform_data = &da850_evm_tl_leds_pdata,7 ]8 V' J- p1 m
.release = led_dev_release,, i: j! h* L' ~6 t9 ^, {4 l: p/ {; c
}
* H' h& j0 U" o% y# g};
2 C' C6 P2 q& O8 N
3 V0 k- T( t5 r3 Z* g6 N; Dstatic int __init led_platform_init(void)
2 |) H* ?3 f+ Z8 _( f0 U: Y }{
0 U* N& s5 y$ Y6 L int ret;$ I/ L* R& h3 H8 a4 s& G4 `
#if 0/ M+ r4 X) o. L/ N2 t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, N* J$ v- L9 c6 h; k; |3 C if (ret)
. e& N3 N9 E0 C9 @ F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( {" g% e2 j9 C) t' @ "%d\n", ret);/ K/ Q6 X' \5 H' r
#endif
; \" d& T' o2 F- N- G v" q ret = platform_device_register(&da850_evm_tl_leds_device);
' d$ F* r0 i$ L5 w. e if (ret); g/ C# f9 p7 b7 U: [% X7 V) U8 e
pr_warning("Could not register som GPIO expander LEDS");
# L' E9 j( l/ J1 G+ T else$ B* x2 [' r0 E0 |( j0 q
printk(KERN_INFO "LED register sucessful!\n");
9 F3 f$ Q. @! n# q! F3 p4 {$ Z
return ret;; H( e: e6 @: u1 m3 [2 O+ a
}
1 ?8 d# Q$ v2 X1 a5 P! [4 C. A( S- _
static void __exit led_platform_exit(void)
; L: y1 E2 q2 C4 y6 N% M; B" }" w{# R' e+ d) z0 X* n
platform_device_unregister(&da850_evm_tl_leds_device);
+ u; |! f5 H4 B" j* u# Q- ]" b. q* z7 y1 Q6 T
printk(KERN_INFO "LED unregister!\n");
2 ?9 Z! `/ O% u}
! f8 Q' J3 M7 m' z6 d
9 N/ U/ p3 C, A$ h* b+ rmodule_init(led_platform_init);. k f* ?: i6 T0 p% [/ h
module_exit(led_platform_exit);
; X! c' d% x, `* A- {8 y$ g U7 Q2 j& W5 r9 ^$ ~1 J9 y
MODULE_DESCRIPTION("Led platform driver");: ?- S7 E2 o4 g% v6 ]
MODULE_AUTHOR("Tronlong");
; P: y% R8 r8 Y- K! rMODULE_LICENSE("GPL");
# m+ r7 ]( u! q+ W. T/ d2 P
1 x3 D/ g4 \8 c& `% ` |
|