|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 U. h3 c2 _' a! m3 v1 l
#include <linux/init.h>
) L/ L" r8 N6 I1 ^7 @#include <linux/module.h>
) T. |4 L N" y! P# o1 q( Z#include <linux/kernel.h>8 q6 R) {, L0 p9 }$ l9 O+ e
#include <linux/types.h>4 A: e9 E, |) ]# M8 D# w! m6 K
#include <linux/gpio.h>
/ S* R. P/ j$ N8 t1 q#include <linux/leds.h>
3 F! S; R9 Q7 u3 T4 A. Q#include <linux/platform_device.h>
+ W$ B! x1 j# P' T' w1 C7 o0 Q" s6 `8 S% z2 @/ C. P
#include <asm/mach-types.h>( t6 @/ f$ x H& s
#include <asm/mach/arch.h>
9 g) a& w h7 k#include <mach/da8xx.h>& ?# I0 E: |5 b
#include <mach/mux.h>
9 p5 i5 m- N$ }) O7 b' h5 b5 d. K8 N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* W- {+ R, q8 V7 @* j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ q1 }( H+ h4 p6 E. Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( B7 a! g$ S2 }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ m; E6 \6 m# ~3 [9 a0 Y' w
0 ^5 q# J. j8 G+ M' D/* assign the tl som board LED-GPIOs*/2 ~0 X/ ?6 {. n, t
static const short da850_evm_tl_user_led_pins[] = {
& Q3 y B& M% s /* These pins are definition at <mach/mux.h> file */
0 p4 g# H5 A9 @9 } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 f+ X* n/ I8 D* h* ~$ P& k, o. F; r
-1
) V% D% c) ~' A$ m l d' P( ~};
0 b4 b& w+ e' L$ a
, }% z) q* ]% _+ _ w/ ?" ~% c6 bstatic struct gpio_led da850_evm_tl_leds[] = {
5 f: b0 m* i f {
' S6 j) W& Z# D6 E, i .active_low = 0,! n1 [7 X$ a# R+ ?; o. | j
.gpio = DA850_USER_LED0,. D2 Q& g- u# y4 Q
.name = "user_led0",
2 O f) H7 S# r. K# u .default_trigger = "default-on",2 V% z, t$ T$ m
},, Y3 d* p3 P, E( F$ o" f2 ^& S
{) Z( r. F! M" n! U, p$ t# X
.active_low = 0,
' O0 P7 h& h# {& E' w .gpio = DA850_USER_LED1,9 O* x6 h$ _8 ]! @! ]; y
.name = "user_led1",
4 P4 U+ ~5 y2 w0 l! \% T .default_trigger = "default-on",, W P) x& o* I4 a( A2 z
},
8 X/ I7 O8 P. K; I8 d2 W* C( z {
5 B# L {+ @/ V8 Z+ | .active_low = 0,
- C2 H: _" x) \( n+ q1 ~6 {' x .gpio = DA850_USER_LED2,/ g% C% O" n0 M
.name = "user_led2",9 K/ O. ~. |4 I- a; I/ C
.default_trigger = "default-on",
' W& M: g; J! q2 E" Q },3 Y0 _2 v( D1 Y8 X- s8 w
{
+ E# g7 K& P3 u4 K .active_low = 0,
4 g) N" [! M% C5 a3 Z* a' @. t6 ^$ t .gpio = DA850_USER_LED3,
5 A J# ]8 N. S5 B .name = "user_led3",+ G, `6 b/ t! L# W5 F
.default_trigger = "default-on",9 k" E( }0 w; D9 H$ M" U
},
) L: f& @+ F q y$ I};+ o- w; N% ^6 |3 r1 R
# N/ r# {& X$ e3 y' F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& A0 ]1 z& B: J1 o .leds = da850_evm_tl_leds,
- j7 ]5 \( m# F! N& Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- m7 {. K$ }2 u {% r) c2 o9 o3 t};4 @2 a5 F6 v* S5 r2 H
7 z2 T( ?/ ]% I" [static void led_dev_release(struct device *dev)
% w8 w* W, c0 S0 t6 X{4 V! o6 j7 V- Z; S
};
3 A7 S4 g' D2 z2 h0 |$ z0 Q4 R2 a o" y
% f/ _+ r5 @4 h/ z6 ]' ^static struct platform_device da850_evm_tl_leds_device = {0 [% N" A# @3 w" {8 F4 w
.name = "leds-gpio",
' h9 w, g, H: z4 C+ H' |8 a .id = 1,% ?/ j/ u/ J5 E3 x7 ~1 s3 U; K
.dev = {% {/ l- P7 M1 S4 _* `, T0 u2 {1 {
.platform_data = &da850_evm_tl_leds_pdata,8 k8 [" v+ Q# r: U+ B- b
.release = led_dev_release,6 f `4 G$ R, C7 K2 z
}9 o4 E9 q. l9 I$ } @
};/ c: G3 I3 q9 }5 ~: ~
" H8 I" E9 x% w+ a
static int __init led_platform_init(void)5 [3 f J3 j4 E+ X8 }/ G' Q* ^/ h
{- O: x3 }+ h' C* h1 R! e1 A; L
int ret;- `" N" x+ t& x8 P9 }
#if 0
5 c6 x# }: N9 m8 B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* k! `8 S. n& B @9 |( w% g( I F
if (ret)
! a, V( L" u' D9 ~. ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 _+ I( h3 q+ l2 z* q
"%d\n", ret);1 L [5 a2 E; Z# Y9 @+ r# p [
#endif
1 t0 G6 u5 B3 b5 v1 J ret = platform_device_register(&da850_evm_tl_leds_device);* f# F5 e5 v+ a3 X! Q0 y: V3 K
if (ret)9 ~5 i9 [! l8 H
pr_warning("Could not register som GPIO expander LEDS");7 N: g6 s j6 t! Z" ]
else
: ?0 Z% Q" V) r, V/ h6 Z printk(KERN_INFO "LED register sucessful!\n");( k6 ~8 L# T- c: C" u8 s* Z X
3 X8 }6 H7 L' p. Q/ k& m" v6 X
return ret;
^8 G; J/ N1 T) A}) u0 h3 u# G' P6 Q/ t3 r6 g1 w. E
) j3 w6 X7 g6 W# }3 Xstatic void __exit led_platform_exit(void)0 R: ^) b2 `7 F+ _' x V% _
{4 M( i4 B; J; @' N* r6 z- z
platform_device_unregister(&da850_evm_tl_leds_device);$ X- ?1 |; E1 [ |+ n8 @
5 k* k0 ]9 i; e6 l printk(KERN_INFO "LED unregister!\n");' b+ j, f: r7 u* k, ~" d: a. l! l
}
( m4 T5 K0 p2 | j6 L2 F3 w
9 H. f3 M# v( F; v' c3 S0 Umodule_init(led_platform_init);! {6 L/ i% y$ h$ A+ o9 T; y7 s1 D1 ^
module_exit(led_platform_exit);3 X& Y% Q" p8 ^! K# k$ R
9 |2 d5 J4 ]( R3 g( y7 SMODULE_DESCRIPTION("Led platform driver");
7 v: S' J. U; ]2 GMODULE_AUTHOR("Tronlong");
# \9 @" o0 u- d8 ~MODULE_LICENSE("GPL");
- i. Q# L ~9 D8 G8 Z
) t% V8 [6 o! V, X" r |
|