|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* k+ X) X- r6 c$ {6 ^2 @
#include <linux/init.h>
D4 s: Q7 ~5 u# S/ @#include <linux/module.h>7 M6 K9 a- L! j" J1 S+ j
#include <linux/kernel.h>6 m, }8 Y* F+ m) B
#include <linux/types.h>
" \* z4 |+ N y#include <linux/gpio.h>) S {2 H( U4 v. L0 C$ c4 H
#include <linux/leds.h>
% b. t0 K1 x9 ^: P ]& G- j6 \. l#include <linux/platform_device.h>: K, C' n% H0 }
! D h# s2 H: V/ m+ l$ I
#include <asm/mach-types.h>0 Y5 I* q: L; o G: p5 H5 D1 \
#include <asm/mach/arch.h>/ H" y I) A0 O8 e+ [
#include <mach/da8xx.h>9 X0 d2 D; j8 N5 L( A
#include <mach/mux.h>. o; i6 r- i* y0 a5 [' Q
9 [6 V. r7 l8 r( \! ^3 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; N" V) c& c7 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); l1 U$ A* ]7 o2 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* q* S9 d0 v T3 z! b/ R8 L, B! s) \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): ?5 j- c2 }4 w
0 d e. X% O0 Y1 ]
/* assign the tl som board LED-GPIOs*/
, Q. n5 ?2 |. d6 istatic const short da850_evm_tl_user_led_pins[] = {1 I6 I3 N& ~8 f
/* These pins are definition at <mach/mux.h> file */
/ v/ t6 i" q2 q7 a- b1 s9 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 G/ B0 U# Y9 g2 n) o
-1
4 _; z) @2 c- o};- C! \9 F0 f L6 o0 n- t& c( Y
* e, ~3 v! G7 `
static struct gpio_led da850_evm_tl_leds[] = {
0 W) P+ ~& s+ g {# H* Z2 @2 k% f/ |& D
.active_low = 0,
- S: z0 E, x2 K$ o# J' L6 H .gpio = DA850_USER_LED0,
* H2 z/ E7 w: Y4 o3 C" y1 b .name = "user_led0",
% E! ]8 v8 f0 v( y# l .default_trigger = "default-on",
' _* B! A; j- R6 j$ H },! `& Z% |8 l2 r" S2 l
{7 e) O& T/ N4 e \# D: a% L# }- T
.active_low = 0,% ~( Q" z2 S; Z
.gpio = DA850_USER_LED1,
% v4 j' U4 f& h4 i4 y& L4 ? .name = "user_led1",( n; a1 e' O- Y
.default_trigger = "default-on",8 w: {1 w" h$ f {" A0 h
},
7 ~* k% e3 |! b. n {
9 H9 c% r9 a8 b, M .active_low = 0,
- ^: J; \ j6 b y2 i$ F' o .gpio = DA850_USER_LED2,7 |% e1 N, J$ p& V8 k; u4 u3 h5 h5 w
.name = "user_led2",8 ?7 c0 s' i3 v2 W4 e6 V9 l/ r X
.default_trigger = "default-on",
1 t7 q; c" l* d$ a4 Q" ` }, `2 V$ g2 I# k! T0 ~# [
{
$ f9 _7 x! B& A: z .active_low = 0,; a& I% p3 D' u
.gpio = DA850_USER_LED3,
. [2 V: z @2 P; I# D1 u* Y: y .name = "user_led3",
$ _+ p! F5 v! r .default_trigger = "default-on",
& Q. u0 x' `4 g2 @' r0 @3 N },
8 @8 `7 \2 a a& L$ w+ ?7 _};# i% m) K8 j3 J. a) k3 U5 g( F9 A2 k: s
+ o( F0 i4 i' s% v9 Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
Q; p5 \2 d9 r) J/ h& F .leds = da850_evm_tl_leds,
( K }/ s' d- a1 L2 ], g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 P5 _: Z4 j4 P1 S5 b
};" {: w/ I6 W4 _/ S) X7 |0 ?) L, W
* `1 |8 q* U* J- L- j4 @" K
static void led_dev_release(struct device *dev)
2 Q1 v3 W: _" z! v- g+ C2 f{1 r2 C/ @/ ~) ~
};
- T# B& ]- B0 I0 ^/ ]) O
; O/ J$ j& f, u% |static struct platform_device da850_evm_tl_leds_device = {
* L8 E+ { S o' _ .name = "leds-gpio",
. P+ b9 t6 C3 J6 y' e4 i .id = 1, J* Q3 @: ]! `) n
.dev = {
K5 D! Y5 }9 _ A8 u1 M: b; a& f .platform_data = &da850_evm_tl_leds_pdata,1 ?1 D$ {- `/ e
.release = led_dev_release, O6 Y) L+ u/ N X3 i" R
}
7 n, }; {" m* I7 V};
. g4 t# F. z3 A* z9 Q @& ?% ~; C! f O3 I) p' U6 R- x5 U
static int __init led_platform_init(void)
9 G8 a5 W8 E, `" {# q{- n2 `7 F; ?( \" L
int ret;
) }8 Y% C" s& Q( ?6 B/ {#if 0+ ~. n q: A% U3 d# A! ]5 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 J7 `& e6 |- X! F4 A& w C
if (ret)0 M- H9 T1 b0 Z. m. g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ o3 e9 y: _, i "%d\n", ret);
/ K3 Z, R# \3 h# U0 ]+ G#endif& Z1 l2 B# l' U
ret = platform_device_register(&da850_evm_tl_leds_device);8 |6 E( _( `- P2 b3 `
if (ret)
: Q+ m: M: r8 g pr_warning("Could not register som GPIO expander LEDS");/ L8 V0 o- Q2 e8 d8 j/ a
else
, K' g" \( p+ O) O' F! n; p printk(KERN_INFO "LED register sucessful!\n");
) N) _5 d( g6 k9 g# C5 k4 W6 D* f# h6 o
return ret;
5 F( A2 V2 S9 i8 K1 P- C}+ [" @! d' w" K8 t
( H: N4 J5 G% @7 g9 M3 a
static void __exit led_platform_exit(void); b& c; H! T* h* P! ^& J
{) V9 g$ {* @5 U2 [: l& _
platform_device_unregister(&da850_evm_tl_leds_device);* t1 }& w# B+ `0 _" F! r
5 K! n8 b- D& d, q6 |' y( W printk(KERN_INFO "LED unregister!\n");' v' F L0 t: G- I& F; Y1 n
}
5 J* g. A6 g- b
0 E4 w- z( d" G9 Z. `module_init(led_platform_init);4 z0 \$ {& C+ h
module_exit(led_platform_exit);* g5 H( Q* X3 N5 ]1 Q. M' q) a! D
5 F2 c3 H2 ~# a: T7 \3 o" S
MODULE_DESCRIPTION("Led platform driver");& {9 H( T' r# Q$ D5 k0 `
MODULE_AUTHOR("Tronlong");9 ?3 s; Y3 w8 A3 @
MODULE_LICENSE("GPL");. I! Q) p$ v" ^
7 [9 Y8 _9 g) F1 ]5 r: K4 p; K
|
|