|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% p( P9 P s& t9 C( ]1 o
#include <linux/init.h>. }+ { K4 R: k V" I
#include <linux/module.h> p1 \" ~; i" t4 l" W# k
#include <linux/kernel.h>0 m( Z& P# A) z4 |& d: [9 e
#include <linux/types.h>
. @4 I' H: C4 U% I- ^" C" F; P. b7 Y#include <linux/gpio.h>
1 ^$ N; u( S6 n7 j( h8 h#include <linux/leds.h>, \; J" @* S! y! }: H# a9 o3 i
#include <linux/platform_device.h>7 S* W9 G/ s( z2 `
( \5 R4 h ^5 \9 @, C/ L#include <asm/mach-types.h>
$ E' t9 @9 v* m+ W+ \#include <asm/mach/arch.h>" N. ~0 N, e+ ?6 }% q/ e, h& Y
#include <mach/da8xx.h>& l, N" l2 H- a! Y! y# r9 B: Z
#include <mach/mux.h>/ r7 C; ]2 D0 K6 r C5 n
, I0 \8 b' b% T! R* E b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 Q7 z" G! ?4 |/ W$ h/ w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 M. z4 L) H% ~5 n' a% L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 t. ?" b4 X2 A* ^1 u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' } L) X( U. K1 D, a5 Q. f, W+ H+ d6 A5 @8 a+ _0 G
/* assign the tl som board LED-GPIOs*/- ?5 }7 ]. |9 ^3 p8 {
static const short da850_evm_tl_user_led_pins[] = {
+ D- ]7 u1 ?8 {+ e4 {. E /* These pins are definition at <mach/mux.h> file */
* B) a" q1 y" j- s9 ?$ { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! w* r9 `6 G, X# F7 C -1. r8 I: U5 Y8 d
};. ^5 P4 d. \% s% g5 Z
( D5 [3 N$ ]8 k9 k& k! T% ~% hstatic struct gpio_led da850_evm_tl_leds[] = {
% T |7 R% K* h; W. T. K {' F. r; S2 i% Q" a( z& ]/ d
.active_low = 0,
& |5 }8 ]) @5 V .gpio = DA850_USER_LED0,! S# s8 T0 P* \+ e" X0 u
.name = "user_led0",0 O7 }- b0 C- s" U( N# i. b
.default_trigger = "default-on",- ^3 C5 ]" y' {5 J& y1 X, B# @+ p- a
},& r) t# ]# { S4 H) R1 Q0 i( J8 X
{, O5 O6 [8 p1 I3 C* q( J
.active_low = 0,' B* j9 }" O2 H8 f1 b, W& _9 k8 X
.gpio = DA850_USER_LED1,
9 p H' \7 R) r5 i .name = "user_led1",1 g/ m: G& j- j6 H2 w
.default_trigger = "default-on"," p c. \' Z8 U# p5 Y
}, _& I) S, ~! h% R- T4 Q
{! _# y, [& h7 O. W7 e( ~
.active_low = 0,
- A, |4 }& o7 d8 C. B+ } .gpio = DA850_USER_LED2,7 U' C4 D( a9 Q4 {0 ~5 F/ v
.name = "user_led2", p0 w: r, p" x9 }1 n1 K4 n
.default_trigger = "default-on",
- j; i% A0 y! u },1 m- `0 M( O A( M* e7 F
{) Q5 G) O3 t6 B5 T# V4 \( o4 _
.active_low = 0,; {& ?! p& \' n0 E
.gpio = DA850_USER_LED3,+ \2 ? k+ J! i: c
.name = "user_led3",3 R* a) I9 ?0 S( ]! U+ w3 G
.default_trigger = "default-on",
8 w1 Q" U) s. A },! x9 J, b( L' M
};
4 `, ?/ R. N3 d5 i- P+ ^' n# Q! {8 w A' @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- O4 X& Q, W0 h; Y# g, c .leds = da850_evm_tl_leds,1 v& B" m, C8 b' z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 {6 c3 S8 K5 S, s5 ^! R& R5 S3 P5 }
};# n4 X- T" `8 y
/ [/ P* w2 r) _9 T
static void led_dev_release(struct device *dev)
- ?0 |0 o& _1 f' i, T# U& v- }0 M( |{
6 q& I, s: S& r: n3 ?};
0 B5 A" x( ]6 |. x l" f' {# v2 r& m$ h
static struct platform_device da850_evm_tl_leds_device = {
& j6 [$ i3 Q* h( C$ A; R .name = "leds-gpio",
5 \2 @( H- O* E7 T1 f& ] .id = 1,
$ v/ q0 ~* Q) O5 k8 @8 u .dev = {8 j, q5 i5 q- c2 m, c
.platform_data = &da850_evm_tl_leds_pdata,
7 h3 X2 d$ |; a .release = led_dev_release,9 H9 Y% @" B% m9 z
}2 Z% d$ q- \5 |1 ?
};0 _- |7 N7 X5 J- s* p Y
, d* p3 s5 L! j0 U+ X' |+ Wstatic int __init led_platform_init(void)
6 R, o. Q) j( [5 ^: L$ m" a( Q{
0 }. r$ l$ O+ b4 A+ R int ret;+ E6 Z% f4 B& ~' ^
#if 07 B3 H+ ?) z1 r4 G* r+ k/ L2 X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 G8 u! b1 F5 i8 i+ U9 t
if (ret)0 I) H0 Y; |6 a! ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" D% q/ l9 Q% D! a "%d\n", ret);5 K# j7 R% E/ v7 c' ^/ x
#endif
, A2 ~- n$ W, k& Y! ?) z0 `' r ret = platform_device_register(&da850_evm_tl_leds_device);
4 D2 p$ A0 V9 T& b if (ret)
. x. O0 F/ m' Z9 n! {7 E) o pr_warning("Could not register som GPIO expander LEDS");
" W, n; u+ t ]! A+ f& R else
3 q: j5 W8 Z3 N. L" ?: x printk(KERN_INFO "LED register sucessful!\n");
# s5 T, `, N e+ U& u' N2 w+ [* H" V- j
return ret;
# P4 T( b7 l+ J+ B3 j' B4 U; X}
" f8 E! l+ ?! u o9 D+ P( G: [' x* _
static void __exit led_platform_exit(void)
6 I3 _4 r: S8 h* q$ M5 w# ~* _{% E9 O j7 E: y: k( N' H
platform_device_unregister(&da850_evm_tl_leds_device);: I1 ]* m( @8 f! N: S
w+ v: \8 s* g* @; \' s% q
printk(KERN_INFO "LED unregister!\n");- S$ _4 P9 ]9 r4 y I
}
; Q) u/ y4 R0 Q) E. f) ]+ D$ j) Z
module_init(led_platform_init);
" p$ `" \: u& x: g5 Bmodule_exit(led_platform_exit);3 |+ C# J* \3 l* k- V" P4 i
6 A* }) q' Q. N j$ ?* @& h
MODULE_DESCRIPTION("Led platform driver");4 j# P" P9 [# n& a9 w
MODULE_AUTHOR("Tronlong");
9 s% g6 o' R3 ^" mMODULE_LICENSE("GPL");1 \ }; E: v$ y1 Q& C8 `* e6 c
4 m. g# Y% |/ `, r) j6 H; a2 a |
|