|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" v3 c' c- P) l- T! b; {
#include <linux/init.h>
2 h8 u3 e' Q8 `" u% G0 q#include <linux/module.h>2 V5 b% m' N: i0 G2 y
#include <linux/kernel.h> H T2 [9 `% V
#include <linux/types.h>
& i4 U) J: }: G5 l- g( k9 ^0 }#include <linux/gpio.h>3 T! j7 k7 ]& o* z
#include <linux/leds.h>- _1 v" p3 @, D( B- W3 W3 b0 ~
#include <linux/platform_device.h>
_, G/ P; z. t C$ X3 A( I. t; D. g/ `
#include <asm/mach-types.h>% G; C+ f/ ]. X. `0 _+ d P& c8 x
#include <asm/mach/arch.h>
8 j" Y; V e9 E2 u' } l$ v6 s& t#include <mach/da8xx.h>
! u$ p% k6 a/ |6 j9 _6 G6 p0 l: f#include <mach/mux.h>* d2 k( \( F8 X' Y# v# }
% E; M }$ g" n9 G+ c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ U. c8 R& D' c, ^( o, z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 ?. h7 m4 d. d" h6 A j! T" c, E: q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% d. a5 [3 e+ @$ w) D- R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 ~4 |) V1 B: _8 ]* W9 I! X1 X T* x8 L+ r3 c! y6 b& j" w
/* assign the tl som board LED-GPIOs*/
9 ?6 x& n' ]( t* i8 z# q0 wstatic const short da850_evm_tl_user_led_pins[] = {3 O3 ~4 n+ h5 i/ G" c. X2 t2 i4 ?$ I
/* These pins are definition at <mach/mux.h> file */; L4 Q/ y# ^4 X! {- V8 ^5 ~# n+ x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* n% r. h: w' G# l
-1) S4 y; y. c% f. G7 P$ r" u
};
1 c$ D2 H, R9 X5 c! Z1 e4 M; J
' t- `! T, m. p2 C8 @/ B" Mstatic struct gpio_led da850_evm_tl_leds[] = {
& K* Y+ e, i7 M4 Z8 S. m( \! M {: C$ S6 J1 e9 D" J
.active_low = 0,, ?2 W9 `, [) ^ `6 B
.gpio = DA850_USER_LED0,
5 l# g3 P3 O9 M1 T; O1 `# _7 ?9 B .name = "user_led0",) B3 A3 \) Y1 K
.default_trigger = "default-on",8 N" T& U8 F+ J$ T; R
},
@: L; D* N7 x( F {
0 T; s, z; q0 E1 C! r* }8 Q/ ]1 d+ P .active_low = 0,. \! P9 I6 G( d+ E9 @
.gpio = DA850_USER_LED1,
. q( u6 m2 }- A8 I7 b .name = "user_led1",7 u# T% z( m$ b, }2 ]5 t8 w
.default_trigger = "default-on",
6 S l9 X8 g1 S+ O# {3 y. E0 t6 f },' `7 ~1 X+ W- B7 q4 c5 r0 x
{
9 v( q9 `, S. @0 d7 K4 L1 q' q9 Q .active_low = 0,7 ]* Y7 V+ e( F
.gpio = DA850_USER_LED2,6 H, {8 g+ J) d/ S% d
.name = "user_led2",
8 a( Z6 E; R/ I: y. j; l& U .default_trigger = "default-on",: w( T2 G1 M# z; \9 F. I* k+ L
},: J4 t" C- G; ^! J' H3 j
{
8 |8 X& B+ m8 C- K$ O5 U: K .active_low = 0,
) C" K* H0 C& r. e. Z5 f& o3 ~7 e .gpio = DA850_USER_LED3,9 c9 o; M: ^7 R8 t
.name = "user_led3",
`, x0 c8 ~ b .default_trigger = "default-on",0 D: U8 h2 B# h
},# a' ?0 _6 w% H7 ~
};
& l/ Q2 ^# K7 i# W M8 l4 x1 h# `5 c, d5 ^* i" ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 a. k+ D j6 P: ~
.leds = da850_evm_tl_leds,+ U. T+ b; T; N* B0 {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 H1 ]6 i% a/ e+ _. n5 \' G
};
2 U$ e8 H& m2 L3 W4 Y+ W# v0 R
6 z M$ p" ]/ V* S, z2 u# r/ Zstatic void led_dev_release(struct device *dev)
( P1 u& s- h" o$ Z$ o: E' I: m' G{2 _0 |/ v, e* ]: { w! g
};6 n: T! s/ o2 F9 W6 l% y) ~: V/ D
6 j4 S3 s! B! [/ y( L V/ Mstatic struct platform_device da850_evm_tl_leds_device = {
$ g$ o/ w3 J7 t7 D' v' k2 Y .name = "leds-gpio",
& a! v- f6 c! k7 C( g- }. i .id = 1,: N6 ~+ F0 o, M% E
.dev = {
/ V. |3 F' A1 v) a( P9 u5 }7 O9 D .platform_data = &da850_evm_tl_leds_pdata,
. i- w! d9 l$ f/ c .release = led_dev_release,
( I& G7 s0 D* g }
/ i$ N: P* E3 D! r/ X) m};
; G6 o2 s0 Q# a1 U
2 T7 M& y, P e! Z: gstatic int __init led_platform_init(void), c% J9 _8 S* Z f
{ U! F. f! }/ A& K# G( N- N
int ret;5 g6 K. s1 W) a4 J
#if 05 g3 P4 e! V5 ^) d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# ^ c. F+ F1 z
if (ret)
2 O7 s8 O2 k* K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 i! ~* f7 _1 y% H6 P "%d\n", ret);
5 `$ Z+ n. }: N9 q#endif8 b+ |9 J j" A- E
ret = platform_device_register(&da850_evm_tl_leds_device);
" y8 r* w" j7 S* H' @* R- j if (ret)
9 ?# w ~: o* N( e/ L pr_warning("Could not register som GPIO expander LEDS");
+ F$ W4 {5 \) E! I# G4 F else
2 e) R8 n6 a6 ?, b# b printk(KERN_INFO "LED register sucessful!\n");
) O% W) U7 @: @9 o" {6 c
, Z7 B& `" y6 j* @ C0 N* o4 f' N return ret;3 |" _! m2 O3 ?
}4 I! b. C8 P( ], L Z6 E5 t
: @$ A% ]1 X' x8 [
static void __exit led_platform_exit(void)
$ L: Q4 I5 K m9 P `{5 u7 O0 m; q2 Y# B
platform_device_unregister(&da850_evm_tl_leds_device);
/ w: X6 k6 \: b2 |
0 x2 m0 ~5 }) O) ^* m9 ? printk(KERN_INFO "LED unregister!\n");, Z8 K# q' Z0 a$ b1 z/ K: {
}6 K3 R8 k5 V. b: o( K2 b* [, G
' m. N2 s% l: H- `: V C
module_init(led_platform_init);
" T' Y m N8 M3 I; A. ~module_exit(led_platform_exit);, b; E& t, ?/ P5 q* W1 O1 H0 W
/ ]$ C& H1 _$ ~3 N! `( P( FMODULE_DESCRIPTION("Led platform driver");
: Q/ x/ @2 R& Z$ K8 q* g. C. W qMODULE_AUTHOR("Tronlong");! x( W- R# z! X0 @
MODULE_LICENSE("GPL");
* W2 T1 y0 T [$ t; p3 }2 F- U6 v' C' ~, P. l
|
|