|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# ~' N9 O7 {# r. m. q6 q2 k! U# B#include <linux/init.h>
: J( }5 P7 K3 } Y#include <linux/module.h>
7 y& v2 j0 g' v$ e$ e4 u8 F#include <linux/kernel.h>
, b6 G: ^7 A& K4 R# \) u+ C+ v Z#include <linux/types.h>
9 j$ ^- g0 |" o$ s* x#include <linux/gpio.h>4 P2 |6 U# O" d2 g/ B% [
#include <linux/leds.h>
( E& ]: _ p' V#include <linux/platform_device.h>5 H. N& z0 W, B2 X+ f- q
" v7 z- M3 N! \- w3 }#include <asm/mach-types.h>
) {2 p6 C( p; ?7 C#include <asm/mach/arch.h>1 Y3 K7 A0 Z' g3 z# J; P# v+ u& p
#include <mach/da8xx.h>% X2 R$ e- z8 S6 P; Z- f1 [
#include <mach/mux.h>
8 Z B" Y9 ] c8 Z( i6 }, s8 q
8 l& S/ x( u# S E. l#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( d" G7 y* L1 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ X& k2 D: i7 R$ c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 |9 z! i" X. Z* @) M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 j& B( G4 a) ~$ L
0 R3 _5 E' J1 h6 J* @( P/* assign the tl som board LED-GPIOs*/
@: R( X5 i3 h! ~static const short da850_evm_tl_user_led_pins[] = {. Q# C9 ]# L. f% B' H* V( C
/* These pins are definition at <mach/mux.h> file */
/ t8 N$ ? f5 R$ h8 n- U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! g! b! Y! }8 a9 {- l u( D. B7 X -1
7 H* c2 y3 K0 W) t( P4 O% R};7 T& k- P) X+ k4 V3 l6 g1 q
) O: U: y; z! d$ W; x( B6 ^1 s
static struct gpio_led da850_evm_tl_leds[] = {# @* G! u1 [9 L6 T
{; e- Z# A$ K5 T4 ~9 e+ `
.active_low = 0,, Y* ?, h4 m1 x. m
.gpio = DA850_USER_LED0,. b3 q% t" ]6 h
.name = "user_led0",
5 b" ?& Y. v1 y. }* C5 P. U .default_trigger = "default-on",
4 C+ D, J& C7 X% ]- o* N. M },. b; M( q& t; E0 q7 `' H! b8 P
{; p2 ?8 _. d: d/ o5 N
.active_low = 0,
: e) }; b q$ C1 ~; u .gpio = DA850_USER_LED1,
6 l! o$ N% V% d- v; w* [ .name = "user_led1",. o2 r7 C, V4 \+ h- e. f3 y
.default_trigger = "default-on",
5 N% v: E e2 x4 P# Y' V },
4 X3 P/ j; \! p b3 v# k {& d D Z+ D( _) I9 l" t
.active_low = 0,- _+ ~" T+ C- g. s* \. W
.gpio = DA850_USER_LED2,
5 M0 U) p% L8 l' M/ }7 _ .name = "user_led2",
8 D: U, X3 L3 q .default_trigger = "default-on",; s- L( T) }6 K) L4 C" [9 P% Q2 j
},1 p: l$ [; w, k% @
{4 b# O: c) `7 B
.active_low = 0,
( ^5 T- D" O! Z' N .gpio = DA850_USER_LED3,
3 {: b- y ~2 K' j .name = "user_led3",
" S6 n9 E& r5 V, k8 g3 s3 p- g .default_trigger = "default-on",( j3 z1 j+ p) e6 S' }
},
. D6 V+ e( a# s1 a ?: S};
% z+ A0 L* G1 d6 Q. |
3 H2 _4 _& z, d* ~0 k: v3 {* `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ y5 K7 t: U% K# o7 l1 K6 T
.leds = da850_evm_tl_leds,; [3 [ d9 h' A. _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& u4 L z G( c8 W7 r
};. A9 [+ i9 ?5 y: h# `, X/ W ~
& r4 l! [& K, g* u( O# D
static void led_dev_release(struct device *dev)
2 A2 ?# e3 c( S{3 _3 H, b" g/ ^) V& P7 I, \
};, z! r; a6 E5 m: E4 ?
- q! z- L, p( v" {! Estatic struct platform_device da850_evm_tl_leds_device = {
4 Q* s; E6 }( L \/ V, A0 q .name = "leds-gpio",+ C9 r0 I: S7 S+ q
.id = 1,
( o( I$ B: M+ u, b .dev = {
" A8 ?- E6 y5 K6 r* f4 u .platform_data = &da850_evm_tl_leds_pdata,
* \' W0 H1 P1 g/ c4 }7 M" S( w .release = led_dev_release,
% h) l/ U- U2 e3 q( i }
3 }9 ~0 N# m. {: b" r};, k9 i/ x% O" J* P' F4 T5 j6 e) V
* v! V; v& b$ R9 ~4 S2 p ^static int __init led_platform_init(void)$ P: k9 B; x% ?/ l
{
( J2 K, p- h& X int ret;
" U; E" n0 Z$ k2 t( @$ c# k#if 0
4 n7 T( X S( z8 S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 |5 ^7 v/ f' p, a/ O3 C: Y1 [
if (ret)
5 r" }" p3 T% B5 b& k pr_warning("da850_evm_tl_leds_init : User LED mux failed :": r$ a/ U9 L; c* A Y _
"%d\n", ret);: B/ C' n0 V9 D
#endif2 V0 O6 A: m5 i* t2 N+ ~- P% _
ret = platform_device_register(&da850_evm_tl_leds_device);
. R3 Q/ l5 @& [ if (ret)
- O; W/ @- h' k3 B% k" I# O4 u pr_warning("Could not register som GPIO expander LEDS");
- v: Q/ z" W5 X: S2 b. b# ^ else( \ D- o: y% u5 X. b
printk(KERN_INFO "LED register sucessful!\n");
9 D0 X0 Y. Y6 _* |5 c' r
0 t8 P, n. l0 p return ret;5 p$ v# B) n* H$ r, ?" i
}
" X2 t+ L/ r) z& N" R p2 |; G( B% K- v; `
static void __exit led_platform_exit(void)" G% M) ^+ B- @4 W7 p4 [- I9 U$ H
{* s8 X- v, j" C& e6 g; u; C8 K
platform_device_unregister(&da850_evm_tl_leds_device);
% @% B2 o; N5 e1 z2 G9 m( r0 T" n
! L: Q9 y' z, z8 z# z) T# Q printk(KERN_INFO "LED unregister!\n");
- i; ~ o; w) _4 a9 o/ P}& D1 ?% b2 \- n% r2 q& C/ z
G I0 p" n0 c. N2 \
module_init(led_platform_init);
* ?0 r3 Q& n4 q1 _module_exit(led_platform_exit);
! y V) _+ S! T
8 H$ D+ }3 P: I6 rMODULE_DESCRIPTION("Led platform driver");
- P. F3 I, r- m7 Q* n9 A( C% pMODULE_AUTHOR("Tronlong");; ^5 j1 X( \( |4 D0 o- d$ A) G
MODULE_LICENSE("GPL");
3 I9 b* J7 J( r
! a1 M! ^1 i; d/ R' b |
|