|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 N# p# M) ?0 Z( J' l0 ^. h
#include <linux/init.h>
, C3 ]3 X6 V* c, T( s* t#include <linux/module.h>
3 R# X" e5 V% |) I; k& }, V% ]#include <linux/kernel.h>
2 Y0 ~& Z9 \% n* p6 ^7 \- @( O7 J8 ]#include <linux/types.h>* a2 F3 t2 R0 d0 n3 c! y; P7 P; N
#include <linux/gpio.h>
) z. e* _. h. Z#include <linux/leds.h>9 K" ~: ]* K: m, I1 y1 Y
#include <linux/platform_device.h>
' d0 v% v2 U0 F2 V
% L( C5 S3 }* v% z7 W. X+ ]3 Z ~#include <asm/mach-types.h>
) w& ~, x' m1 D7 ~7 I#include <asm/mach/arch.h>' d4 y+ m1 `; M; N, }# j7 \( [( o
#include <mach/da8xx.h>- ~, O4 ]& R6 n* D( c! i
#include <mach/mux.h>/ O7 R1 c# N8 X- X
0 X' S& R( N' H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ z# d& Y* e6 L9 p T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ X# F+ l- w/ z3 ?* y4 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% a2 Y" @4 t$ U; v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 P" D& k! ~0 S; N
; W1 J9 K/ ]/ ]) A3 K! T i" Q/* assign the tl som board LED-GPIOs*/
. q5 e, n& k& hstatic const short da850_evm_tl_user_led_pins[] = { y0 P3 n8 n) k' A5 z, p0 V
/* These pins are definition at <mach/mux.h> file */
- y3 G+ | `1 v3 N2 \, w6 ^* j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, m5 i5 x7 _. c -15 X6 i- F. {) M
};
( n& [. ^1 ^& u5 M7 ~* |( W
/ }$ K% {, |! N$ f1 wstatic struct gpio_led da850_evm_tl_leds[] = {
( c/ [1 W9 Y% S7 g$ L5 W% q {
" ~9 z0 t/ m1 z8 H4 ^8 S/ T .active_low = 0,
+ @) u/ Y, ?2 B+ S$ ^9 G .gpio = DA850_USER_LED0,: m7 }5 }& g* w; s7 g8 A& @3 U
.name = "user_led0",
6 d! n; {; |5 f. c+ n" f .default_trigger = "default-on",$ _% D6 T" |5 [9 s: a Z
},; L+ x8 E! q3 L9 o: @* [" e
{+ G. E' L: c9 q% i1 u, W% N
.active_low = 0,
* |* q, E; X+ L2 _$ L0 C% \ .gpio = DA850_USER_LED1,+ o6 F- }( z/ ]* a9 R6 Z
.name = "user_led1",! |6 ?$ B! W" V0 i. b+ _* @+ |
.default_trigger = "default-on",' O. x/ Z7 T+ X' o% `' B) n1 k
},
8 t1 j' S0 B: O% B {
' }" z' [( K+ n# d- b0 e .active_low = 0,3 L+ V: `0 o$ N. ?- F+ Q( F0 e
.gpio = DA850_USER_LED2,7 i C& S# Y" f- c6 y6 m
.name = "user_led2",6 L% U W2 m: F4 n8 V7 Q; Y
.default_trigger = "default-on",! g6 P2 A# d/ j) W6 T
}, B) I Q5 {+ A7 l9 a
{% ~5 W* [2 [' @( k. R0 d8 O9 o
.active_low = 0,
5 z/ W5 @3 Z& n! |9 A/ S6 y E* V .gpio = DA850_USER_LED3,
! @: @& U2 k3 |) T .name = "user_led3",/ t3 x/ i+ x' C( X
.default_trigger = "default-on", g4 X) E1 ^5 ]$ O: Z: U! Z u
},
* v7 o, v, [& ]0 [9 I% J};' V7 s5 ]8 P2 h- v+ w8 ?+ T
) X. N/ h( H& L) C/ w! Z" f7 `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 ?/ R( z7 d; S' v; r2 A
.leds = da850_evm_tl_leds, f; M8 e; i0 Y$ W7 g& w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" a0 l; E0 p1 n# @3 @. Z};& E' a$ [3 d' `* K! z
' N# L1 j" F# P) V pstatic void led_dev_release(struct device *dev)
, |- w1 I) ?) _# J7 P |( N# `) O# ^{, o5 {. w z! A- _2 J' x
};
8 a9 w$ X3 o' \% X( C4 p3 W; N3 {8 q5 t& b* M) l/ q( Q" b) l
static struct platform_device da850_evm_tl_leds_device = {
/ i' J U& r3 s* c$ t .name = "leds-gpio",
7 h1 U1 r9 E" @- X! f/ o .id = 1,
9 Y6 k4 D: L$ F2 Y% m0 ]( ~ .dev = {* I& h3 Q6 M; o6 b
.platform_data = &da850_evm_tl_leds_pdata,
5 ]* `9 Q8 @% K$ j- F. P .release = led_dev_release,* ^ D; F e8 u' N7 A0 D8 V
}* L/ M+ I3 {/ w0 z0 m0 z8 ~
};$ Q7 V+ ?; H5 s: t
; b) z9 @% e! g9 S p- p4 [- `
static int __init led_platform_init(void)
7 f/ W* T+ l. q7 [) }& U A{9 ?# u( B" \6 t; a# v ~2 Z
int ret;
' K5 @ z3 f1 n' Q! {#if 0+ t' Y8 r8 Y$ y* \# w5 K! T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' t/ l( h e# z9 F
if (ret)
! z4 e0 V0 g( {9 Z0 b, J pr_warning("da850_evm_tl_leds_init : User LED mux failed :" d$ w0 u9 i- K$ P% S r' d
"%d\n", ret);
& r/ Q4 G4 F) }#endif
G4 N9 g" C, O9 l/ u ret = platform_device_register(&da850_evm_tl_leds_device);
6 A# n" b" b2 ?4 _4 b' E' q if (ret)* m7 Q& n4 x8 N" k- V# v
pr_warning("Could not register som GPIO expander LEDS");- [' p6 Q" K* p
else
5 c; V5 g: [( r# @+ d printk(KERN_INFO "LED register sucessful!\n");
- u! `: w$ \* R' V6 b7 k1 [. u) g! U" D- l* \+ [8 C
return ret;
9 b: h: |% M9 W: C}) {+ w4 H1 P' O* [4 |# b
7 ?# E7 }5 W" {5 v
static void __exit led_platform_exit(void)
0 A, j5 _/ _& U{
; Z1 J6 E. P' h, ~ platform_device_unregister(&da850_evm_tl_leds_device);
9 }3 e% U% Q/ T5 w5 K O6 I( U/ m4 ]: d. q3 p9 C( A6 S1 Q7 x
printk(KERN_INFO "LED unregister!\n");
: Q; W' D" E: Z ]9 ?# p. r! x! }4 @}
' e7 M# ^! Q6 L6 G, Y" K# Q( \% d0 X; D( g$ U0 r
module_init(led_platform_init);
4 ?) s4 H+ P9 x. W& `1 xmodule_exit(led_platform_exit);) y q& Q! R& F
9 x8 |0 K4 Y8 E7 y- w7 F( p1 @
MODULE_DESCRIPTION("Led platform driver");7 b ?; C/ o& B# | @6 z
MODULE_AUTHOR("Tronlong");
" s4 ~: P" Y; d3 BMODULE_LICENSE("GPL");
/ m T) X: P+ M1 ~, P" S
2 S3 g, ~* y+ ? `4 N/ `, @% o |
|