|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# A/ u5 M! f( t
#include <linux/init.h>: p' P+ {/ N9 b4 Y6 c, n% \
#include <linux/module.h>% ~" @& S5 X3 N, u
#include <linux/kernel.h>
0 ?: A* X2 K/ L7 a7 v#include <linux/types.h>
9 X$ ]3 Z) G9 j) o& w#include <linux/gpio.h>/ u3 n0 k+ F# f7 t
#include <linux/leds.h>5 r; v* B, S% I
#include <linux/platform_device.h>0 |" T$ G" k# s" @( X; M1 I
' w* X) N$ H. z4 d4 ~6 A' y M5 i C
#include <asm/mach-types.h>9 |6 G l2 ]; f- q
#include <asm/mach/arch.h>
4 ]0 V8 v1 E4 I* x0 T#include <mach/da8xx.h>( o1 f8 f1 w# @! J5 k4 _' U
#include <mach/mux.h>
. j3 R n9 ~% e5 W1 x2 l
3 E4 b/ B0 f7 m2 j* S) m4 M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# Q6 Z0 u6 ^7 q" j" L- v9 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 X1 Y4 ]7 Q k! |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: }$ T% m$ U9 F2 e, t; _) r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ d" l6 q9 u. e. _0 O
" [: n& g' r$ ]
/* assign the tl som board LED-GPIOs*/1 W7 F" {/ D0 x6 p) Y
static const short da850_evm_tl_user_led_pins[] = {/ k3 C$ L% ^. L( e, H; }, b+ D
/* These pins are definition at <mach/mux.h> file */) D5 N; c( A3 C) c, f! x0 X6 _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. l: r, `. E; Z: \: p, f& M -1: V5 U( z% L; V( L/ X6 Q: P8 W; x+ ~
};3 o* c6 C [ E
- V/ `8 |) J& s3 ?& f/ vstatic struct gpio_led da850_evm_tl_leds[] = {/ E+ w. F3 |: o! Z1 e' i
{ Z2 l4 \0 I8 f: z! P% W0 _- K
.active_low = 0,* X& X- V# s- R4 j
.gpio = DA850_USER_LED0,
$ h' ^- A) o) t9 L0 x .name = "user_led0",
?: w o' f/ f" Q- A .default_trigger = "default-on",% C. W7 q9 o% s* e& v2 A: w
},4 U. H- s) g. A$ s
{2 z0 m7 W0 l# H8 H4 Y; W3 A3 Y
.active_low = 0,
) Y( i8 x) R0 i8 ? o, e! y .gpio = DA850_USER_LED1,# B* V; ]( Q7 `8 Q! {
.name = "user_led1",& ^; j ?3 v) c2 v" X
.default_trigger = "default-on",4 k- Q" P" R2 ?' U- Y
},2 D& V# w9 m; ~- O
{
! Z! w, j+ G# ?$ c5 ~, x+ A1 e .active_low = 0,
5 q1 F6 P G% L% } .gpio = DA850_USER_LED2,) [* c `! T( F3 ?# Y+ d
.name = "user_led2",$ g" u( Z$ B. Q9 q
.default_trigger = "default-on",' i* q8 }+ X s
},
6 n5 K& N: V6 T) u0 L M { l) ]9 a& p$ p
.active_low = 0,
* p7 M+ h( C, @' D# w, u9 \4 B0 K( r .gpio = DA850_USER_LED3,& s3 A% t. Z5 k" G8 n, L
.name = "user_led3",
, L, s- Y( z' ` T( W- P) E .default_trigger = "default-on",7 n- _! F; U) v: [4 q2 [
},
5 X& j O' W3 ~; ]% O B# A8 A7 A};
; N! F0 T* {( ^' p" r" U! u
: W, O: b9 `& m3 T1 m) U0 Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; R3 Z [" _4 G, H# O$ c
.leds = da850_evm_tl_leds,
1 s" G- V }- i; l. ?7 H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& a- l1 o8 k1 `9 k' \$ n$ N& J9 O
};4 }) J; y) @, d2 ~) j2 {& l
- T/ M7 A9 F" o, m2 X+ L
static void led_dev_release(struct device *dev)
; A* m) N g* O' P( T{
" F9 v. _/ S' x};* w, p$ |7 m8 y/ W- J
J" @: G# G8 q2 ?static struct platform_device da850_evm_tl_leds_device = {. {# k9 e& K+ I; q* }$ O
.name = "leds-gpio",
- S% r! |2 Y( R W1 H" S3 o3 L% S .id = 1,
' _0 t2 p R7 J$ O6 \+ H: W8 Z .dev = {& G5 h6 B" f. }6 K8 \0 C
.platform_data = &da850_evm_tl_leds_pdata,
' W( _9 B$ c9 z2 _- v .release = led_dev_release,
- R/ n" Q( h- N% G }
?- t% C8 S7 _! D};( p+ a$ v# Y7 Q2 D9 m e" B
& p6 k- F+ U7 n$ \/ J! Estatic int __init led_platform_init(void)5 L2 m) {. F4 [5 c. q: Y
{! D6 O( }3 ?9 [
int ret;9 y0 K& ?. j! v, o% T
#if 0
7 q2 }$ D9 m! \- t' a6 j8 D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& _: }- N3 ]3 S$ H2 S
if (ret)
: @ \% ~1 \4 N" u) ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! Q; m: R( n5 [2 v5 `) }0 P "%d\n", ret);
0 Y4 A( Q6 N/ M3 |7 U. [#endif
0 W, D/ [, }: f ret = platform_device_register(&da850_evm_tl_leds_device);' `. k! K4 t2 O O4 J2 M* w
if (ret)
% `0 ^& X- C0 k- e pr_warning("Could not register som GPIO expander LEDS");
" K0 X* h( C7 B; p" @6 u else# l# x6 c) n A: E Q+ [
printk(KERN_INFO "LED register sucessful!\n");
, s2 t; \7 c r! t O3 C7 Q
8 {5 K8 L& V0 U3 `6 M. t return ret;
& r6 C6 J& {/ H}' x( K8 e. x7 e' ?5 K# ?6 i
6 g: t, r* N' N0 _+ n
static void __exit led_platform_exit(void)$ C# { k+ r: {" ~8 m; o
{/ x/ k$ V6 T1 ^
platform_device_unregister(&da850_evm_tl_leds_device);# p, y. M/ [4 U
7 J) `6 ^- q$ m u; d( c printk(KERN_INFO "LED unregister!\n");2 p+ y4 J6 e2 }% V% P
}# w! i+ e; m6 S$ o; X
6 Y1 g2 J: T W+ ?
module_init(led_platform_init);' z2 t: G- ?) E( V8 A! u( K
module_exit(led_platform_exit);$ u( h9 k5 u1 U) e1 j& u/ o
# }0 }$ k" x, ?# J% _" p
MODULE_DESCRIPTION("Led platform driver");7 R# v0 ^, \2 Q
MODULE_AUTHOR("Tronlong");
. f. O& u2 G) w- W1 a3 o) eMODULE_LICENSE("GPL");
p, L1 W" A5 S8 N# L( c" Q& x3 Q8 k' ~7 b# O
|
|