|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& r" [" Y( C' X! S3 E* e8 P7 Z
#include <linux/init.h>1 k k" ]" A6 Q( \" }8 d
#include <linux/module.h>
! S1 E# l. ~7 |! y/ A0 D8 q% l#include <linux/kernel.h>
8 b+ T( k3 Y5 t# O#include <linux/types.h>; F! `) L7 [- R( _4 a
#include <linux/gpio.h>
6 Y1 x& H( c* W# T#include <linux/leds.h>0 \- L: O0 ?. K8 K; ~) ^) ]
#include <linux/platform_device.h>
; x0 n5 d$ n/ e7 e) t: B0 P7 u
; v0 H9 ?" W: B5 `) d' R# Y4 Y#include <asm/mach-types.h>. z9 M7 [& h- n0 k
#include <asm/mach/arch.h>9 D3 L0 O! d R! j7 [
#include <mach/da8xx.h>
c* R3 L4 s+ q4 i1 _#include <mach/mux.h>7 b3 R7 l3 \ [3 y1 X
. t/ F; d: r" ^. z+ S/ B% ?, m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' H8 w- z' n0 v' x2 g6 H! G: T. W% K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! p+ m7 r, @( E, ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 b% k0 _! G1 y2 e% @4 w; e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" [) `" y3 [+ I3 E4 c! u7 O1 d1 n3 w
7 f' n- r1 {& V' A; x1 P1 B5 `/* assign the tl som board LED-GPIOs*/. D! B+ T7 }$ h2 }9 e6 M1 ?6 Q
static const short da850_evm_tl_user_led_pins[] = {
5 _( P: Y: ?! O) l/ t" b' `% x /* These pins are definition at <mach/mux.h> file */
; I) r6 f- v% t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! v" @7 l9 @, U+ { _ -1' ]' w: V6 n9 u- w, a5 {
};
* T! X- G( W! k6 D' v0 w) n
- P4 i6 ^$ k: l6 }9 c; \" j! ]% ustatic struct gpio_led da850_evm_tl_leds[] = {
# r- T. V3 ?$ N _8 g6 V {
* E; w: D4 S }9 G$ M .active_low = 0," z# D( g3 D& j; c$ B
.gpio = DA850_USER_LED0,
( j- D& b1 \7 b2 _: _( |. u" c/ x .name = "user_led0",* |. |$ `7 L' \8 l7 u
.default_trigger = "default-on",
+ }" l9 o3 c! h" p5 P. L Z3 L1 T, _ },# m; m& Q% q; p& n/ U4 X6 z' ]
{* Y7 V4 p9 t, P! f
.active_low = 0,* {: j1 l9 M. v) Q. b' g4 ~
.gpio = DA850_USER_LED1,; U' `9 n8 q( z8 N* d' U9 J
.name = "user_led1",
0 b) I0 c3 H1 f' [ .default_trigger = "default-on",
: g9 `7 H7 Y3 j0 ?* y$ T },
! Z$ L4 E7 S' w2 o9 ~: S$ M2 V- m {1 e: t% } k5 R( T _( M
.active_low = 0,
2 U5 s# q) f% C0 H5 ~: I7 _ .gpio = DA850_USER_LED2,
: W0 L6 Z0 E" j$ `, V .name = "user_led2",
) W" O& W. V: I" G .default_trigger = "default-on",
- |* v1 ^1 ?# B" Y" q2 F. J },2 T4 ?4 U) d$ O. n! ^
{7 ?1 u2 o! m* B) _. K& w
.active_low = 0,
4 ]6 k- \8 p( j/ d+ o3 w4 h .gpio = DA850_USER_LED3,
/ J5 {2 e- k/ d .name = "user_led3",
" }- z# g5 l" f: d5 W; w" \5 \ .default_trigger = "default-on",
- {+ m& y ~1 |( ^ },7 Q) W1 K2 b. d F: f( `7 g( m
};
! z9 y4 O/ U4 o2 p8 w# `7 h7 f+ R1 m! K' l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# v& Y$ K Z( G" R2 T: P7 H: W .leds = da850_evm_tl_leds,
5 S& P8 @' V$ T( H! R" `, ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 k% r# \ J. x6 @
};
) T. N) _% ? p; a( }4 D
6 Y) N5 s3 K* ~9 b4 }static void led_dev_release(struct device *dev)4 ^% H- V7 p* [, P& I' N2 H3 T
{, l; ?9 t; N5 Q' [* w4 B6 k; R
};
& N6 n5 k7 o* E) `# y& f, `' c' a6 M, g" U! f3 a/ ~# ?
static struct platform_device da850_evm_tl_leds_device = {
" M! m5 {3 H% {6 r% w2 J0 X$ ? .name = "leds-gpio",
, d" z9 j" t+ L8 V6 v8 o .id = 1,
# B3 _: [# z% X9 C0 k& d .dev = {
r0 R, l- R; ` .platform_data = &da850_evm_tl_leds_pdata,
2 I3 T% L1 I f, `1 s6 ?3 ~ .release = led_dev_release,) V. l/ K+ Z4 i7 @% Z1 k
}
q, P2 X' t# r/ _5 m6 k};: W$ R& c5 x: ]
" _6 c1 b* \ P: l* x
static int __init led_platform_init(void)
- ^# G1 {% X4 K. U# U8 a. U$ m8 \{, D# h$ B, Z" r1 A/ y H) n8 ?
int ret;! L' y9 a5 W" s- B6 l
#if 0
2 G$ Q! S3 X* v3 g: E3 ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 s2 P* o2 h9 {% H
if (ret)
5 V1 G o! p5 _5 `% t/ q9 a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 K; x1 @* u2 K% v: F+ l+ d "%d\n", ret);; F3 I5 H6 I1 \
#endif
& R: V: r/ s( V$ h |" S ret = platform_device_register(&da850_evm_tl_leds_device);
* b3 V; s- Q$ _ p0 Y' y if (ret)
3 E, G; X# j b6 t; o pr_warning("Could not register som GPIO expander LEDS");
+ O2 i& j8 i% r+ L& I) K6 t6 ^ else
8 Y9 H4 l" D* G# i) D printk(KERN_INFO "LED register sucessful!\n");
4 B6 k$ @4 ~& ]5 T6 O, p) I: p2 d. Z& a1 ^
return ret;
$ M0 s) t9 L; w, L0 Y* `6 l}
* @0 E b% r3 K
- m9 u2 E2 v% B* V: b' W6 t9 Mstatic void __exit led_platform_exit(void)4 h8 L1 M9 v& c6 f
{5 e; g% n. A9 w& U. ~0 {# q k( a
platform_device_unregister(&da850_evm_tl_leds_device);
. f( G, |$ I, L' ~: N
+ i& {: x4 N1 d+ ^! h0 J) Z+ `7 I printk(KERN_INFO "LED unregister!\n");7 L5 A; ^6 L; i& X$ Z9 p
}
+ [* \" S' I: {# ^' z2 G$ @' H P( n. i X0 u
module_init(led_platform_init);
5 C; W5 q& k+ y! ymodule_exit(led_platform_exit);" E- M7 |8 c! c I
9 V1 x$ H% @2 M% b% {, ~
MODULE_DESCRIPTION("Led platform driver");
8 U+ m; u: \9 X5 IMODULE_AUTHOR("Tronlong");
* t* h2 Y' N) g Y* T3 tMODULE_LICENSE("GPL");9 m1 p! c9 E3 S( T) w; q
* f. ~4 y. G" n: o6 |0 b* e
|
|