|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ B7 ]9 I& _6 ]4 Z4 i9 p6 H) {! ]2 c3 b
#include <linux/init.h>' N5 n! o/ {, Z
#include <linux/module.h># Y8 t$ z9 |6 c! t8 T1 ~
#include <linux/kernel.h>! K* T! `* f- N# s
#include <linux/types.h>
; q8 v. @" k( L#include <linux/gpio.h>
0 A; U9 X' d2 R. M5 j6 N#include <linux/leds.h>
$ O5 B, U8 Y" @#include <linux/platform_device.h>* q& B# q0 Z. d8 z
6 i; P: X2 W+ x, e7 K+ }
#include <asm/mach-types.h># z. Q5 Y8 Z' t# o: @) [
#include <asm/mach/arch.h>+ N$ ~9 N' k( z t) \
#include <mach/da8xx.h>
& M/ `2 R1 ]4 W/ [" r2 X% W- `#include <mach/mux.h>
1 T0 E( Z2 w7 F
8 A J9 ~% h& L( J1 T; q- R! }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' X* c' E% |/ }* E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& y7 J: ~! Y8 V6 a+ Z% m3 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) B. _$ q( ^- S* o E2 f$ C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) V& f7 m' m* a9 n Q
6 U' H9 u1 ~- K5 Q4 b
/* assign the tl som board LED-GPIOs*/8 ^: q9 @. p6 ?' ^
static const short da850_evm_tl_user_led_pins[] = {; l$ D$ o7 M' ?# w+ K+ u
/* These pins are definition at <mach/mux.h> file */. p* J8 {% G3 z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- @& K, }) U' h! M
-1
" v8 K- k8 X- G+ c( S};4 {3 _5 p- M+ w% Y
! e8 C$ [/ w2 \$ }# R3 H ustatic struct gpio_led da850_evm_tl_leds[] = {
" y0 o; }( o1 v& q! Z {. M M% D l' p0 m
.active_low = 0,
6 f- J8 O% x( i1 t$ A: i, Q .gpio = DA850_USER_LED0,3 o; w1 [& R/ A% T; p+ L
.name = "user_led0",
) _) M. _) G8 N+ U" D .default_trigger = "default-on",; j4 s( ]0 {4 H$ q% ^" I
},
$ o2 d$ P* F# C; I {: z) B: L( r3 t! Q* W
.active_low = 0,+ A* c7 K( b8 ~. |, L0 U
.gpio = DA850_USER_LED1,1 l: n4 I4 v3 o y7 b3 R ?4 `( d' i
.name = "user_led1",
- g: F, N! s/ _2 w4 A b .default_trigger = "default-on",
; [3 G L. v4 T: f$ @9 j },& |$ X4 |; E" a7 e+ }
{
; L: n$ l+ d2 }6 K7 q& s; L .active_low = 0,
- L0 |" Z h9 ?8 x .gpio = DA850_USER_LED2,
! f) V1 D; N/ u$ T$ e, r .name = "user_led2",
6 b) m' W0 e: x+ C9 W .default_trigger = "default-on",5 m4 r4 l( x% k4 G' ?
},6 l, ^9 o/ {: P8 `
{
# F# X& y) b+ D: F6 b. G* s) h .active_low = 0,
: `9 | J8 u9 x* T2 m/ Q8 v .gpio = DA850_USER_LED3,
7 T! Z- Y9 y5 U4 o- I .name = "user_led3",; k, C0 y' k1 z9 q
.default_trigger = "default-on",
% P) ^; R* u6 F },
r w6 U% Q" o};
! z. Q) g3 P. W9 ~' b, I l
( _. U- {; g7 l. J1 mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! a z3 a8 ]6 s/ ] s .leds = da850_evm_tl_leds,; J/ B, [/ |. b% P' ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& H' Q3 [: Z' u
};$ F" B* d! k' n u: m% N) b
7 C4 c( P/ U) o8 f& Y2 W, Q
static void led_dev_release(struct device *dev)
; q+ L' n1 C# H3 B9 l{
& i+ @( o# q, H};7 H6 [1 b' S$ W+ h3 S
$ F' I# }, C$ l' t3 L, B- F. b
static struct platform_device da850_evm_tl_leds_device = {
6 ~- N @8 `) O; J: c. [ .name = "leds-gpio",0 w( ?6 j% j- W$ ~: `9 o7 v
.id = 1,
1 \8 t3 L: _$ T6 d: I .dev = {. m6 _. k0 d; V3 F; u
.platform_data = &da850_evm_tl_leds_pdata,* e" i2 g& v: i2 T! V5 d
.release = led_dev_release,4 }) ]& x, b: Z9 K
}; J0 u* N) {# z7 ~2 I
};7 t, n- z2 A! U6 c' j* o8 z( E( `
5 C6 k' q3 x& C2 J+ lstatic int __init led_platform_init(void)2 H/ {+ @) _2 Z3 J G5 J" Z% P
{, f8 ^3 u" Q, Y! P
int ret;5 l; `7 P% B' P9 B
#if 0
0 A) N1 Z" H+ W2 s$ f' c- v% c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 [/ p: B% H$ b$ g
if (ret); l6 ^2 }7 N6 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 w5 C4 F5 j/ E
"%d\n", ret);
8 d, I. T, p. G& `% L8 v4 N#endif) U+ y# Z( A$ S* |6 L) Q% T
ret = platform_device_register(&da850_evm_tl_leds_device);
- [; f) j2 g: [3 [ if (ret)7 Y- N0 M( A/ G; ?% c* }
pr_warning("Could not register som GPIO expander LEDS");0 E" `" }0 E3 c& ]
else
; Y# n2 r- i9 r. |+ p printk(KERN_INFO "LED register sucessful!\n");; e! R; U/ Z# D' J/ M/ x' F5 E
, Z+ u3 B9 ^7 T& `% J
return ret;
! [9 |+ G( Z9 E+ z% r d}2 i1 x3 g6 Q3 c) u
* U2 {; t; W* x: g, A) G. astatic void __exit led_platform_exit(void)
0 y- Z6 d# n* b; f: p7 W9 p{
$ \) Q$ w! \" U0 F1 U platform_device_unregister(&da850_evm_tl_leds_device);
_' ^0 V2 ]. M: D& ~5 w% v6 p$ l
1 B5 m7 Z1 V6 [! Q) r! c printk(KERN_INFO "LED unregister!\n");9 \ j1 K2 Z4 E
}4 B- g m1 ^7 D+ C
/ K! L$ a9 }( {9 D1 c% S& d' x3 a3 h
module_init(led_platform_init);
: y, n& r5 w5 a2 U I8 K0 Smodule_exit(led_platform_exit);
# x% ]7 Z5 k- n$ |: H! @$ V) m7 ?* C- {, M$ @& V
MODULE_DESCRIPTION("Led platform driver");
: O( e; l, i9 C1 I2 K' FMODULE_AUTHOR("Tronlong");' m# r( ~ O2 ~4 p( O% F' c
MODULE_LICENSE("GPL");
8 f8 v2 L4 d3 w% m1 h k) _, D- K# _, @$ T8 e/ ]
|
|