|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: h" @! t. S3 u) E#include <linux/init.h>4 U6 P& K8 B$ v2 V$ r+ L7 z
#include <linux/module.h>6 L6 w9 E& c- z
#include <linux/kernel.h>
5 \7 Y$ [9 X9 Y3 i4 S g. j#include <linux/types.h>: o* |5 n) {% x' P/ w
#include <linux/gpio.h>7 F9 r2 b. q/ O( |( D
#include <linux/leds.h>
3 c) Q4 I- A+ }( ]% U#include <linux/platform_device.h>9 V8 P8 s# n3 H$ f% `/ {/ e, D# G6 ? i
; y" y( L! g+ c# M$ k5 @& d#include <asm/mach-types.h>
: M1 f- t0 R2 t% F' O( ]3 B#include <asm/mach/arch.h>' M2 Q9 e% z3 q4 s" s( x4 c0 b9 @. a- x
#include <mach/da8xx.h>, s# o, \( P- a
#include <mach/mux.h>: @; } n4 M v9 \! }% x2 Z! G
1 a# c2 F9 Q1 U; |1 @1 f# ~+ O& I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- j, Y% F+ b- N L/ ?6 s E. l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. C( Y; C4 ~& P4 P7 ]; V4 c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! m+ x* ~( I8 c* S6 G0 `+ Z; B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 }; A$ J/ ~4 u0 `* W# G% b# [1 B& D
' `: {/ h: g3 H! S, E4 D: b/* assign the tl som board LED-GPIOs*/& S- o, F" [. l
static const short da850_evm_tl_user_led_pins[] = {
- g# V, k1 s S+ [, g /* These pins are definition at <mach/mux.h> file */
6 {% K; w, w; K8 `# Z1 f5 \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& N8 J8 p$ |6 E. E! \ -1; h, I# {$ U; J# Q, L7 g
};
. a# S) U/ k/ Q& b4 L# B3 E
, r$ k& Y0 U' m: t: astatic struct gpio_led da850_evm_tl_leds[] = {, I( H+ p: `0 g4 _% n( C
{- `6 @" ^ G* q& }6 c
.active_low = 0,
! M$ X+ |9 x1 I Y0 P) {# J .gpio = DA850_USER_LED0,1 Y2 d' p' j) a8 `, q0 Z
.name = "user_led0",
4 R# Y! g% M v .default_trigger = "default-on",: J/ X3 n' D4 Y! }) L
},
% z0 a! W7 r5 j+ s: @" n( `4 v {
) s$ n8 X a1 ~2 Q0 E .active_low = 0,
4 x9 J" M" c$ l3 G/ g .gpio = DA850_USER_LED1,
|8 m! _! M. W$ t' e .name = "user_led1",
* f, r6 l4 o+ H' F .default_trigger = "default-on",
( D, s; ?9 J( x3 Z2 U },5 d& e4 C0 A$ d& F3 r/ j
{/ X1 o9 Q( x2 ^7 V4 c
.active_low = 0,
* i$ Y% A7 j5 D$ S% o: E4 \; c .gpio = DA850_USER_LED2,$ z* ]7 R2 o, e
.name = "user_led2",0 U" j1 M6 r% k5 r9 Z+ i! k; s5 J
.default_trigger = "default-on",, n3 G; x% `3 ]5 P! ?
},
0 @; i$ m" Y+ ]. u* c# b {- D: l, O# g: o2 O% E
.active_low = 0,. D7 N9 ~: k3 M* @( ~
.gpio = DA850_USER_LED3,' T" F- {* k8 }5 E$ W8 D
.name = "user_led3",
* s9 z1 |0 @3 J; Q+ p8 n .default_trigger = "default-on",8 z8 u& T* ]0 Z/ |# b0 g1 {9 d+ `
},6 m5 W) D8 @ H: |
};* K" V! L" u0 f( W
. z5 _; b3 h5 m# [ f3 x( N2 Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& T' d# H* R- e+ d .leds = da850_evm_tl_leds,8 A) q5 d+ ^+ ]- z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ e, N* \- C0 b' @& o9 W' p
};
. v: B: x2 U- f
- S' Z4 F, O2 ~1 h$ ^static void led_dev_release(struct device *dev)
# |; N0 L( P( z) w( g1 L{
8 ?$ t2 x! Q8 ?8 f- |};
; Z: [9 P' z. P6 b/ [
6 P1 h0 ^: I. U! y* r7 z$ f9 b0 Istatic struct platform_device da850_evm_tl_leds_device = {7 w% I1 B, U) j j, }6 N+ c
.name = "leds-gpio",
( y6 L$ v& U+ A2 H, H! T3 A .id = 1,
, s2 m2 H0 h0 {' @6 H+ ~ .dev = {
; P' }4 N: K0 m .platform_data = &da850_evm_tl_leds_pdata,7 j4 B, S! r+ i6 b R& `
.release = led_dev_release,
, C$ K: ~! G- {* M: z: G }3 v% T2 P) H8 x* l
};
' Z- E- E+ d5 n1 s: Y# _6 |) ^% m- \( j- |7 I! v
static int __init led_platform_init(void)
+ _. N+ Y! D( Z$ h& C# Q3 y{2 u+ t. e" D5 v
int ret;8 d4 v8 v3 j" V! Z# r
#if 0
0 o2 W( y! P( ?; h' r: B4 b! { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ a8 C, x- l& r9 W) B
if (ret)
+ y6 f9 k' w' Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :", O4 U' x7 M$ r
"%d\n", ret);
2 j. D3 u% ~* `; N9 \& `% c$ j#endif
( D3 v3 q: E9 r( G' \: z3 d ret = platform_device_register(&da850_evm_tl_leds_device);+ O# P: E1 D: U, N: ]5 y
if (ret) J3 C5 w( Z$ p0 R4 I
pr_warning("Could not register som GPIO expander LEDS");# B; b1 u( Y# k: a2 v( c; k
else
+ E# D- p! j: E( Z printk(KERN_INFO "LED register sucessful!\n");
' q( t' X8 r) @- i. ^# V- d9 Q8 u) W+ v! J( h$ h
return ret;
6 A& t' o6 N8 j; |, O9 R( _8 A9 ?}( A+ O! v# C2 u: k: J7 [' c
7 w0 g& F% ?9 V! G$ v
static void __exit led_platform_exit(void)
& \8 g% P S" W3 t$ y. h! Z{
5 s/ \+ j3 t7 M5 C' Q' W platform_device_unregister(&da850_evm_tl_leds_device);
8 Z5 {' H- }8 p. o" w2 h5 ^5 a* o, Z" v8 C
printk(KERN_INFO "LED unregister!\n");: r; g& v' H# b; N) [! p! R
}' l! l4 R4 P, q, W! {
$ v9 s5 S, Q- h
module_init(led_platform_init);
" S/ ]. k6 w" D" Jmodule_exit(led_platform_exit);$ g3 t4 [1 r6 z- D5 u' Y
3 ?& p' @5 K1 w8 h' K/ Y
MODULE_DESCRIPTION("Led platform driver");
# A& e- j! F# V. yMODULE_AUTHOR("Tronlong");1 Q5 `7 o$ I, a- P3 A$ b
MODULE_LICENSE("GPL");
W/ ]7 _; B" w3 \ S5 J; Z5 H. t; J* G7 c* H/ S% C
|
|