|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; m. h0 u2 Q* x
#include <linux/init.h>, K/ L8 {- T% [- @# _) m0 A
#include <linux/module.h> @5 Y% \" S0 K! V8 p4 i
#include <linux/kernel.h>: O2 R2 ^# y9 N$ N- w4 v
#include <linux/types.h>/ p" H, {1 v( M' C2 V* L! J. Q7 E: Y
#include <linux/gpio.h>; E) b C9 p# k5 A* ?3 B
#include <linux/leds.h>' Y- L/ U1 L" X( S' y: z
#include <linux/platform_device.h>
/ o9 {; Q# ^2 P" j8 i( i* N7 o& l* e- e" N8 y ^: v
#include <asm/mach-types.h>
0 p h+ j# K. U% n1 u#include <asm/mach/arch.h>
/ } b0 M) l- Y$ }9 H8 r& {#include <mach/da8xx.h>
# Z; b5 p+ I" z5 S! p#include <mach/mux.h>
/ n* ~& @6 g8 \( ]. _ K
* n( v0 w' ^& h; l' ?9 d3 i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); E+ D2 |3 Z c( q2 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) M5 E5 K9 R3 ^3 b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 j- H8 a( T7 V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% \' [. j' H8 f9 t; [$ F: D% Z! D* Y k( y
/* assign the tl som board LED-GPIOs*/9 ^% }5 k: c5 ]4 _4 N9 b( b
static const short da850_evm_tl_user_led_pins[] = {
. J3 `/ j! f4 b- u9 _+ f* E* C5 t /* These pins are definition at <mach/mux.h> file */% a/ B; F; P2 A% C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 q7 u: P E; y9 c9 u -1+ J. S8 F0 z6 Q
};$ V# _8 X! S) k9 |4 s
2 M7 y4 t; U# U9 f
static struct gpio_led da850_evm_tl_leds[] = {
8 r; K! Y- ^7 d8 G( }3 W4 @ {+ g5 g: g# i {; }8 {9 j
.active_low = 0,
- |" m, F1 t0 A- N" T .gpio = DA850_USER_LED0,3 k$ ?. G) @" c- M- ^
.name = "user_led0",
8 w* e6 R6 x9 D, i, F/ R4 b" c, y .default_trigger = "default-on",5 v( V* I/ H2 e1 T6 L
},( B' J! F; {$ b+ k8 q1 q3 E- }
{
9 M7 n& s& M6 {; J( Z6 d4 I9 c .active_low = 0,
5 }3 C. E5 c3 k- e+ W+ v" [' R5 q .gpio = DA850_USER_LED1,
u: T4 i* K4 b, l# m) ?4 W .name = "user_led1",/ J+ D. y9 @$ K, P# O9 Z2 T
.default_trigger = "default-on",2 v' K) { c2 ? X4 x
},
1 y, p5 o' o0 S! B: S& n) g4 j! G {
' Z+ i7 {# s9 s2 [& Z6 t+ |# @ .active_low = 0,7 |2 l: o: \! X. h5 I0 x2 S
.gpio = DA850_USER_LED2,! a, x" A" y) G: u1 ^7 D& x# {
.name = "user_led2",6 g! _9 k! j, C/ u
.default_trigger = "default-on",
, P$ t. M$ i/ S& M, a },9 ?0 W$ x3 B& t9 c3 o
{) y& t1 ]+ i% R+ v8 Y: X' \
.active_low = 0,
# e1 _3 t* Y6 q/ F7 t .gpio = DA850_USER_LED3,
; e; M0 J. c# s+ k6 ]( T0 ^ X9 D& A .name = "user_led3",
" s& [2 e: Y9 V( i6 Y6 v .default_trigger = "default-on",0 n9 U6 G* s, Q9 `; x8 T
},! a1 j3 _. y0 f' G! u# L% R* V
};' e& n4 ^- I2 T @9 [# M1 B) O
! g: T2 I9 d: u, g8 N! ]8 _2 w+ [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. M% s9 |. i9 s; |8 {, S .leds = da850_evm_tl_leds,
- N% r/ I0 a( r: Z s# [( I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 b5 T: N% Z0 b2 V( g
};& ?8 Y8 a) _ Q; Z# k! n
$ c+ |( c+ R& H3 u: kstatic void led_dev_release(struct device *dev)
* S o0 i8 g" x. f `{' G. X* l: Y% ^/ @" u) N
};
) l- [7 J$ z% e3 c* y1 M5 q3 S( J3 K( `
static struct platform_device da850_evm_tl_leds_device = {* A1 z9 ^: T; h* M* O t ?# B
.name = "leds-gpio",, d0 a' z1 l2 K+ o* _) R2 V% y
.id = 1,0 [- s* X1 S* Y% {
.dev = {" D5 f! V1 r( m% h; ^
.platform_data = &da850_evm_tl_leds_pdata,
" q$ W# {2 \1 a7 u& g. O5 m$ i9 z .release = led_dev_release,
. K( k1 ?; y6 z7 Y& U0 P }- Z N; q! Q0 z7 W) E+ C1 s
};) Q3 ]0 @0 ^ U1 q3 P2 S0 \
/ T* Y" E" ~6 D Q7 h8 U7 B1 Qstatic int __init led_platform_init(void)
( x' {- s; p/ P( m{
& [6 e7 s! ?6 _0 L% z int ret;
; K, f7 }' D5 a: y" D6 I, a#if 0
: k- g( a; j) C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' U0 B9 e" m' |$ S
if (ret)' C* M' z2 f* A* f+ G) a' x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ V+ t* Y+ H4 Y( S( d; G+ {. J
"%d\n", ret);) S6 \# q. p. ]3 N
#endif
; U c, J; q( ^2 C( @9 C ret = platform_device_register(&da850_evm_tl_leds_device);1 Y: J7 a t" y n
if (ret)3 ]2 P# s3 I; Z" s, r0 a3 P. e8 }' e
pr_warning("Could not register som GPIO expander LEDS");
- {* G' o* K2 _; h; i# P else
$ w- z1 @3 O+ o4 G printk(KERN_INFO "LED register sucessful!\n");
0 Z/ d) r9 { [/ S5 P+ P
, ]4 b; c; K% j' m3 @: ~4 V$ e# T return ret;# R0 [; x5 h+ i4 Z+ u q$ T
}
0 {; v6 B1 W9 n) @. v) M: i3 v
static void __exit led_platform_exit(void)2 @' t! a8 J5 `- ^8 u! c
{1 S' B6 L `$ f
platform_device_unregister(&da850_evm_tl_leds_device);
2 h5 y1 t8 n8 y1 r$ y9 [1 ^
" ~* w/ b! N4 N3 T+ }$ T) U printk(KERN_INFO "LED unregister!\n");
2 m; g6 q6 m& j3 ]. |1 v. w}) n4 T0 A% U. ]0 g& c9 \
7 C& X% q1 F7 A$ ]% H2 a; f' A% pmodule_init(led_platform_init);" [4 y0 x( t) g# Y+ T5 \0 v
module_exit(led_platform_exit);& w/ ]& r; u* I2 r2 k S
, i- |2 h4 C2 `6 N. D
MODULE_DESCRIPTION("Led platform driver");3 T* l+ D V7 l. a6 G
MODULE_AUTHOR("Tronlong");! `4 w+ R0 Q+ V6 b
MODULE_LICENSE("GPL");
2 A8 v, P+ p6 _8 F. y {5 v7 o& F ]* ~4 |6 c2 m) P1 H
|
|