|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 T* P/ D, L3 Q/ H$ E/ u$ A0 N
#include <linux/init.h>
2 u: g! [! l; ]#include <linux/module.h>( J. T9 Q' n7 _
#include <linux/kernel.h>
! ^: S- x8 v7 k, j2 b/ R0 t#include <linux/types.h>$ K; O% ?9 P2 m, C) K4 s z! }* V
#include <linux/gpio.h>) d- s9 j( T2 E7 S9 c# f
#include <linux/leds.h>
% E( W& Z8 O% u# B* J5 A- \#include <linux/platform_device.h>
7 _+ J1 a# g8 Y7 u8 b# `
4 G0 V0 @; G$ O/ i#include <asm/mach-types.h>
+ k! O; @+ U4 t" ~#include <asm/mach/arch.h>
" W8 M. o. }; @#include <mach/da8xx.h>' o% h! z2 A5 W5 B
#include <mach/mux.h>
. @8 M) f, r# u7 Y- j% {9 d; o/ x. L J9 A8 ~; e' o9 [# V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 }2 k1 q# q5 P @: Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ e1 O7 @! ?9 R+ t0 ?5 c5 C0 Q% r: K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' v7 E; d% u0 W4 N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 \7 L# t' x; p) p" ^7 d7 K" ^ ?0 w* j7 q
/* assign the tl som board LED-GPIOs*/
6 p6 \3 l; l7 D5 ^- h; `static const short da850_evm_tl_user_led_pins[] = {1 Y& s$ o8 B$ V9 a) {# [0 q
/* These pins are definition at <mach/mux.h> file */, c9 y2 k# R; @+ o6 X) `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ I- n. u9 P6 u
-1& u( d9 p, i! D M
};
4 U; }! R, Y3 p+ n9 ?. k: x Y; U' ]. J/ Z. b7 \2 X8 ~ u; s
static struct gpio_led da850_evm_tl_leds[] = {
% |7 L/ [, y' t" C' A# e5 [) B {# ~, i M1 u# z% n3 @1 [
.active_low = 0,6 q+ f7 S1 b9 E+ P
.gpio = DA850_USER_LED0,
( c. B0 O! F8 p8 y) I W .name = "user_led0",+ O8 n2 e) K, D; t' E3 h7 P. j! x
.default_trigger = "default-on",
% L) I$ z& Z9 H! j4 O( D },
: P- S/ ~& U9 h3 K {; O! P5 o" W9 [9 r/ K/ Y
.active_low = 0,: [: `" j: P' J" n
.gpio = DA850_USER_LED1,
3 r, ?& t: s' s% x .name = "user_led1",) ?1 d& H+ K z a
.default_trigger = "default-on",
7 |; _ B$ ?( L2 M. X+ q7 C },
9 r8 O: Q) `1 D2 p2 _ w$ B" m# n {
; N( l3 h1 v, S .active_low = 0,2 V( T M* `4 B' \7 }' i6 E
.gpio = DA850_USER_LED2,. C* Q8 P2 X* h; i
.name = "user_led2",
/ W+ C9 b0 u6 |. |+ q .default_trigger = "default-on",/ y+ j% a* L8 o
},0 _3 n4 ^/ t4 ~( _. S9 r
{
* T& d( }& z% s+ m4 x9 [ v .active_low = 0,
# j3 g, U1 C( u .gpio = DA850_USER_LED3,% u9 s, I+ U+ l# U! t* U# I, n1 G
.name = "user_led3",
& o" A. Z0 u8 E( F. G .default_trigger = "default-on",; E) j" P# z; I8 T; z1 m
},2 B4 ~5 ^# s# H8 {3 C: [
};
- A( S& c, g+ w) w( U& ~8 }6 ?: ]5 @) i& z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 e# n, O7 u5 s. A .leds = da850_evm_tl_leds,
+ l& w5 Y( ]4 U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& k+ R* Q# y- w$ m* x1 f};5 g2 O. C% W g+ G; D3 W
1 K- T; b$ C! V1 s" {static void led_dev_release(struct device *dev)
9 d7 k% b8 b- a4 }1 O. J+ {$ Q{* e) X2 g5 j; R8 n& w
};% M/ t5 I! N" Q V5 I& `/ J
8 n- S" x. c/ T9 O
static struct platform_device da850_evm_tl_leds_device = {
8 C4 M7 j3 V) Q: b .name = "leds-gpio",% _8 x* _5 c- `1 y$ P
.id = 1,* `( X) Z n: \9 y
.dev = {
) R R: T! j: l) k .platform_data = &da850_evm_tl_leds_pdata,0 E# c$ w5 K0 ~/ O: j- @( E
.release = led_dev_release,
6 j5 F% e0 V8 f- {. K! }% M }8 ?9 H- R" p: C2 Y
};9 b/ a2 @/ V; M
/ E4 D1 k* k! L2 O0 b+ D9 b% n
static int __init led_platform_init(void) Z% Z( \3 F G5 s3 u: t# P& G
{+ W! P2 u! a+ L1 @3 D7 v0 I
int ret;1 c/ N: |0 V$ Q
#if 0
8 }) U) B* v; d3 f8 U6 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- ^+ G3 Q( s: ^6 ^0 q' Z, b
if (ret)
6 U5 r9 k2 |( K pr_warning("da850_evm_tl_leds_init : User LED mux failed :": S q+ C/ b9 r) H/ Y
"%d\n", ret);1 }7 ^5 S( Y8 J3 ]2 w0 J6 p2 r
#endif( y/ Y9 R' S/ Y
ret = platform_device_register(&da850_evm_tl_leds_device);2 \8 P: u! W6 F' a" ]
if (ret)
) T B: K3 _! |6 E+ A" D, l pr_warning("Could not register som GPIO expander LEDS"); m* p7 L8 m" U- y3 i( k& I; v
else
( F7 _; q$ a, R8 L& V printk(KERN_INFO "LED register sucessful!\n");
6 {' A" _7 Y" O) W0 T; p, g. Z: q; u. A% O
return ret;0 F$ G* _" k1 z c# @( F4 c+ y) _
}
* O3 M) Z) I. v0 L+ ~# x$ E
! z5 o8 ]2 r* ]& y& _: jstatic void __exit led_platform_exit(void)2 N! w3 y3 J, `$ c2 ~
{ ]4 \" @$ K; c( V( ?! ~" {( R
platform_device_unregister(&da850_evm_tl_leds_device);
3 B% U. s' r/ z3 j K9 ]
0 j4 n, E8 b9 p- w% d* g0 \ printk(KERN_INFO "LED unregister!\n");
7 x& O; t$ p1 s! B$ Y* D& I}
$ ~8 k% `2 Y3 e( i& Y, d/ T
# U, m$ l1 `+ k- q7 o% Y6 dmodule_init(led_platform_init);3 T* S' X# y1 P+ q
module_exit(led_platform_exit);
# c8 }; B, T2 r. ]' H! G1 B
' z8 w$ x% d# x7 B( ?7 w' V8 i+ F( |MODULE_DESCRIPTION("Led platform driver");" a4 I% [5 g! _) l4 c6 x# y
MODULE_AUTHOR("Tronlong");
9 C$ |9 B' a0 BMODULE_LICENSE("GPL");8 x# u% E& J; @9 v% y6 `4 _9 M) w
* p8 _" p1 P! F- _" Y
|
|