|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" X5 \7 _( b0 ~5 D; M1 \; j7 n
#include <linux/init.h>5 S. @4 h; I$ O6 C: C. k1 U# G j
#include <linux/module.h>
4 s8 \& Y( f% u, N7 Q$ ^#include <linux/kernel.h>8 `7 M/ c! a9 E5 J5 C U: K
#include <linux/types.h>
5 z1 F' k. a* [4 @#include <linux/gpio.h>( r$ m- p- _5 B5 ~9 f; V2 Z
#include <linux/leds.h>& o n1 b4 P: ^+ \; Y# e. F4 u
#include <linux/platform_device.h>) n" T. S0 H5 h' i% q7 |
6 E; ]" B/ ~- n* i2 H' _
#include <asm/mach-types.h>8 h/ @) P/ ^" {# v; S
#include <asm/mach/arch.h>
! J; X0 B4 N' C- B' X ?) T#include <mach/da8xx.h>
/ W3 l: k! p- Q9 Y/ [ z#include <mach/mux.h>: K0 P+ \* p% S' t# Z
1 e. C' g$ b. P. I7 i" F _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ t& j1 ?" n0 W: i! w5 }1 s$ s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 G( O6 W; _: _4 n1 [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 b5 |& Q: V) f) T: L$ \, h! J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 w& k$ \; H: h
& I2 i. T0 e1 c v. H# C/* assign the tl som board LED-GPIOs*/3 [( g3 Q0 o4 P" ~1 h9 t
static const short da850_evm_tl_user_led_pins[] = {
. q8 Y* u; t+ |5 H' j /* These pins are definition at <mach/mux.h> file */" u8 c1 h( o% K, T; W' L' c9 f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ ?9 p8 o) B! d. { -1
+ b1 a& G4 b! E; R. b& u% f};3 e* ~1 H) d S$ R/ g8 r
1 R3 t- {! |) k" I9 U& ?static struct gpio_led da850_evm_tl_leds[] = {
' Z5 b+ E) W) \# O: f0 o6 R {
: ?8 V6 E3 f- y+ T* r1 \3 J .active_low = 0,
9 m& h9 f+ K& | P .gpio = DA850_USER_LED0,. K& [" w5 x! }
.name = "user_led0",9 R( n9 ?. Q+ e1 z
.default_trigger = "default-on",
, k6 `3 B! q8 J3 H3 i },% Z' @! p7 T7 C
{. h; s, k6 z4 z9 Q: g6 r A+ ^
.active_low = 0,$ H& Z' n, p6 `, R. d4 X& _
.gpio = DA850_USER_LED1,! k' {- J& A( E
.name = "user_led1",
; T" B) q+ D( y" P& u& t .default_trigger = "default-on",. n9 t, o2 k& F- a' b" d
},
+ n& i v/ b$ K9 H2 \) ]0 e A {2 I% M% v0 J2 z) B$ P
.active_low = 0,
* H! |3 W8 y$ x8 W5 B1 W .gpio = DA850_USER_LED2,, n! |3 o1 [* \& O6 E( x4 p
.name = "user_led2",' s( {0 N3 ~! A4 X/ z) t
.default_trigger = "default-on",
6 s3 B9 N5 {1 Q% _. ? },) v" t# L2 X# T. p
{$ j( B* j( T7 P) z# u6 R- l
.active_low = 0,1 e# @, W/ V- y$ q5 w/ K
.gpio = DA850_USER_LED3,
7 `9 y% o7 c' K% d {: M& N4 X: K .name = "user_led3",
l3 y7 z7 @- { .default_trigger = "default-on",
9 H2 T: D& R0 Z p2 f! p) X% f# ^ },4 }7 M3 [. a4 ~$ r W" _: P
};6 I- K: H8 Q& k0 `0 O- Z
/ @: e E' ^) [4 r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 E6 s( @( A h .leds = da850_evm_tl_leds," b+ r% [" a) \: v ]5 i4 a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ {- { u! ^6 n};
( \7 ?8 N3 Z; n' d, L! q: g; V P L( R' V: U
static void led_dev_release(struct device *dev)
7 }7 a5 J% p9 A6 u% c/ h8 H{
+ |. [8 c) y# V! w9 s/ ]8 B; a};: B. s& [' S, g% \
( G8 P7 ?" l- M3 x) u' I
static struct platform_device da850_evm_tl_leds_device = {
% Y0 K' i( q% h2 c8 m .name = "leds-gpio",' N2 s0 J/ M9 t @& o
.id = 1,
8 m2 J6 h: r& \ r; J7 V3 o .dev = {
5 E2 d$ K. s1 T/ G$ u .platform_data = &da850_evm_tl_leds_pdata,
' |1 O/ V, B# z% t' C' _ .release = led_dev_release,
8 `8 a; m/ v, u }
+ ?+ d" D! h0 B: t};
# _, v' |9 y+ d6 F+ E
: E+ G6 i! T; P4 U7 n4 m8 q2 \! Mstatic int __init led_platform_init(void)% ]; w8 n, ~# h
{9 n6 E; J4 _- @/ x2 V
int ret;0 |/ O: C0 }9 w: _0 i
#if 03 }7 m9 t2 ]+ _9 C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! K" ]' e3 ]" r& t1 [1 z p, `: L if (ret); j1 W$ D- G9 U: b3 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 O) `5 |- K3 Y7 {- u8 _( H
"%d\n", ret);
: W& K6 E1 X1 e# q! E( t) u$ o0 h#endif
; R9 k% M5 g6 Q9 C6 s& A ret = platform_device_register(&da850_evm_tl_leds_device);$ C! @% W; ]1 u6 }& G* g
if (ret)5 J8 Y1 c9 Q& ^0 n
pr_warning("Could not register som GPIO expander LEDS");
! O* E' k+ |0 V8 u x" f2 d else9 c/ G- T- Y' i E/ B8 E
printk(KERN_INFO "LED register sucessful!\n");1 r& `- U. q- v3 m' s3 I
0 A0 Z* R7 s2 M return ret;
8 x- Z. \. v: p4 |' h, m. }; X}
/ Y$ `0 ^9 j& ~# X: q! ?
& P8 m" n6 U% G+ O' S3 Xstatic void __exit led_platform_exit(void)
; k! h1 e' V- l) u" x. T{$ G: X6 E6 I8 l, Z9 j5 @5 B f
platform_device_unregister(&da850_evm_tl_leds_device);) z* X& f6 J- p* G7 E7 G
1 g+ j/ S, D" o& {
printk(KERN_INFO "LED unregister!\n");8 {+ d0 o4 P8 U* Y- N
}+ J' ?/ e0 x% r8 J0 X/ @' S; w2 [
) J( k7 \/ V# I* G$ W2 `
module_init(led_platform_init);
1 H. g6 ~1 x$ ?module_exit(led_platform_exit);9 R: \: s8 I. ^9 J* h( R
0 }7 ? x* b4 x' \/ g
MODULE_DESCRIPTION("Led platform driver");) Q% g4 Q: E4 r/ W( C9 L L
MODULE_AUTHOR("Tronlong");$ ~$ ^8 R, c/ v% D4 j- H" T1 e
MODULE_LICENSE("GPL");
7 s; L7 _3 K; ?6 ?4 _. }( Y I: l2 k( B* k" m$ B4 i0 b/ r* k, E
|
|