|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ W) J1 u) m# M% a* N$ L8 O; z#include <linux/init.h>
% u+ z1 E) }% P. b0 m#include <linux/module.h>
; n2 V2 E( L. S#include <linux/kernel.h>) l% l" z; }: [3 \( i/ G
#include <linux/types.h>
7 b. X6 Q) H+ r0 P#include <linux/gpio.h>- i0 `' c0 i; d
#include <linux/leds.h>1 B; X& [0 J+ V+ L; X, @. s
#include <linux/platform_device.h>. V8 {) a0 a* V F
- }( g/ G q( }: T4 Q; O. z: e
#include <asm/mach-types.h>% c0 h0 ?. r5 u9 i: c
#include <asm/mach/arch.h>
1 `. u' ]: S. u#include <mach/da8xx.h>9 h+ H) P& ^# k, v4 N Z4 i1 z
#include <mach/mux.h>2 @# G- s: W/ z7 F/ A. y% ^" l
' h; n' Y: @& N9 D( x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) E# A# W/ Y) p7 i! A( ~* Q- q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
k- o% e* V4 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' x; ~+ X. V: ]1 s% u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- _- |) G8 E2 S
1 Q; w+ [8 y4 ~ v/ X- r- ]0 a( }+ d4 Q
/* assign the tl som board LED-GPIOs*/ U: z3 W: ^, O% f/ |
static const short da850_evm_tl_user_led_pins[] = {5 k8 q/ J) S# }# m2 z) |
/* These pins are definition at <mach/mux.h> file */
" R: M: P& a5 v4 O- X" p7 v. b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* r: J* b7 d4 P1 E- q( G
-1/ h; l6 E0 f- ]/ @6 j
};8 @* \- z* b$ k, A0 l
; ] |: P+ `. z, P
static struct gpio_led da850_evm_tl_leds[] = {
3 h; o+ G0 B& K5 Z* F3 | {
4 B) t2 J6 h5 q( [6 f4 a' X- A .active_low = 0," ^0 z" Z9 T. B# o) m6 ~
.gpio = DA850_USER_LED0,
4 }( L# g. p9 y% } .name = "user_led0",- i B9 g @& ^: Q' k
.default_trigger = "default-on",
; G. E, _2 j4 Y! M },: W$ L& J4 c& }$ I. k' Z! ~* J
{& V8 Q* Q" P; p. s4 `
.active_low = 0,, z4 u; ~' `! t2 i* h" s
.gpio = DA850_USER_LED1,
( J& ~- B+ U- `8 w9 V: { .name = "user_led1",, q5 T7 `) D4 ^& u$ e
.default_trigger = "default-on",
, y( Z6 ]6 q6 |. z1 I- X* b },
2 e' p: @( G: o0 x& {0 S+ c0 t* P' T {
$ j4 y2 y9 u; G2 `2 b* @8 _. I .active_low = 0,4 B' A0 { K: m
.gpio = DA850_USER_LED2,4 f0 X& p7 N' s- y( w4 c9 y
.name = "user_led2",( c( @% a- X: {2 r# ]) @& H$ M$ K
.default_trigger = "default-on",
& ~) q: t1 S) f! E9 K: g },1 q3 q4 f' m" r8 d6 l3 }# I
{
# X9 E9 f. u4 Y. a0 }3 h9 Q .active_low = 0,8 H5 Y1 T, P- L3 W9 C* P9 Q
.gpio = DA850_USER_LED3,; T- I# ]% o# B0 \# C+ L
.name = "user_led3",: R. }2 j# o6 w; D' _/ I
.default_trigger = "default-on",
4 t$ ?4 d3 J4 ^$ U L },: C4 o) |$ n( W1 q) S9 J l
};
% n4 h( y9 z2 [7 m) |, F* B% E( D- K- @8 a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 M7 m' L6 D3 q+ L. a" _2 g, B
.leds = da850_evm_tl_leds,
5 N. Z% g5 o3 o1 ^% C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. o0 j- K1 ~8 p};' ?" P/ ?0 k* V& \# F
& @- m5 X7 X+ N$ u: _9 O$ _static void led_dev_release(struct device *dev)7 S, D5 c* v5 G' e7 c T; z, Y$ R" {
{! j6 u2 v7 ]5 {5 Z5 L
};
' g! T ^" l! Z& n6 t! i: M5 o; x. a6 }" w: T4 l8 V! F
static struct platform_device da850_evm_tl_leds_device = {
( T* y1 L1 }) |2 q% j .name = "leds-gpio",
, _ w1 \5 _- U0 t5 i, |6 P7 a .id = 1,
+ @& ~3 }4 ^# M \7 n$ p .dev = {/ R7 L7 h; I2 a( }; b
.platform_data = &da850_evm_tl_leds_pdata,
1 t8 f( ~# s; \/ f .release = led_dev_release,: M+ a% q+ q0 P+ f& A
}
# a8 P1 b- T* v};
0 Q6 x! ?6 @& `7 h4 r0 x3 _2 z: B3 L* |" ? D( [+ y0 m
static int __init led_platform_init(void)
! R3 z+ z$ F5 ^( H( F7 H' T{
& S3 [1 q7 g' C! U! t i' i int ret;
& `+ t1 V: B( U/ z3 Q( d#if 04 t& c! |9 r& Y% T: L' L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* M# g* j' n3 q" V' n* ^3 s. X if (ret)" N3 X m6 Y# b& U7 o3 V, s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" h" F* j8 ^. q9 y8 V
"%d\n", ret);* g$ g: C) b& @
#endif
5 }2 i) Z2 d5 d! Y, y, X! P ret = platform_device_register(&da850_evm_tl_leds_device);
( L, ^# s# O# T1 s t; m if (ret)$ l: t- f& u+ a# q" @" j' c
pr_warning("Could not register som GPIO expander LEDS");4 [: i- V0 k2 d f6 `7 z) @7 {- ?
else t' C" a) B0 }$ y" f
printk(KERN_INFO "LED register sucessful!\n");
' @: V- F3 |3 Y5 E5 x& j" q% H9 ~# k' T+ |' Z
return ret;8 l3 s/ |- u8 J/ ] u
}
. d0 j7 I8 ?! ]. d9 ?
) q `2 C' v: W' M1 i: X' Istatic void __exit led_platform_exit(void)
% ?0 e8 i6 X% o8 y! J8 A{. d1 ?3 q/ B) N1 ]1 e$ x6 q" m
platform_device_unregister(&da850_evm_tl_leds_device);( o- d3 E# W3 V/ k- E9 U3 @
' r' t7 U6 T& i7 W' H" F- a printk(KERN_INFO "LED unregister!\n");" r1 I; R6 L" ~ I- e$ `# _- L
}/ f* C/ w$ h. G9 m
! k/ E1 g) {9 i% L5 B+ c0 h( B
module_init(led_platform_init);
* X* o9 ^! O5 o- X/ i( ymodule_exit(led_platform_exit);3 w- W# k( m7 _6 Q
/ O; Q' A! z% KMODULE_DESCRIPTION("Led platform driver");9 I! Y+ ^& Z% |$ U" ^. K( Z
MODULE_AUTHOR("Tronlong");
, l- ~. d7 _. WMODULE_LICENSE("GPL");
+ c& p' _' C9 M1 H6 A1 q+ u8 x% H- ~& A/ \, Q5 S) d& t7 O. }% g/ l
|
|