|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) d/ ?! C6 u/ R {8 x C
#include <linux/init.h>9 \( R. {$ ~1 r" M) `
#include <linux/module.h>
) _8 D- A! w) k, n& ^) l5 `#include <linux/kernel.h>) z+ A6 n: t7 M" F3 L0 E
#include <linux/types.h>5 w1 {; L6 K' \9 s
#include <linux/gpio.h>
* [. C$ S" P4 u% d0 a, m#include <linux/leds.h>
1 {* `& q4 ]: \5 S5 A#include <linux/platform_device.h>9 d, V* M9 \4 @
4 N6 e; d- z' A7 r' ]6 O#include <asm/mach-types.h>- {! S b- U/ s) x7 v! _
#include <asm/mach/arch.h>
& d1 q2 r7 d5 ^' g" H8 Y C% }#include <mach/da8xx.h># ]4 X7 }2 r. @
#include <mach/mux.h>" t. v- h. J2 Q _$ j
% ] x7 F6 X! Z8 l; z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) [" D1 [6 X$ _3 {. j( W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. m5 U7 i4 Z0 Z: ]2 y( Y0 i" e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ C5 ]/ M* M, W" X1 R T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& ^9 g2 y( P8 I+ ~* t
3 E$ y- l6 i1 [1 S6 D' x/* assign the tl som board LED-GPIOs*/
) V+ ?, X. o( J2 sstatic const short da850_evm_tl_user_led_pins[] = {
+ D5 }, e1 \7 v1 A2 y /* These pins are definition at <mach/mux.h> file */5 r7 G. C2 Z ^% a; b+ j) o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
c# |5 u2 b; ~6 ?# T% w6 k8 @ -1
/ }: k( w: r$ Z0 e, G};0 R$ n! y7 a: n
: Y6 q3 R( m% \) Z: x5 w% X& f
static struct gpio_led da850_evm_tl_leds[] = {
, i# R/ J# N9 y _$ _( @2 d {
9 E8 Q- U7 Z5 Z; u" W7 l2 Q; f# a2 _ .active_low = 0,. l- R; V$ w+ M$ e( i; m3 q3 _4 @9 n
.gpio = DA850_USER_LED0,, y* W& c! P- [' U* g. y, v
.name = "user_led0",& L4 ?. c, o5 m# d5 s2 T
.default_trigger = "default-on",
) `' a8 c( _' {6 k },
3 a; D, @( v& w9 C/ w {1 M1 J/ y2 e* z
.active_low = 0,
2 Z8 d: C8 y+ o6 v. t7 _5 v .gpio = DA850_USER_LED1,
$ }( V3 `; a- Q! N .name = "user_led1",
2 I1 w- E1 s& m% \ x# @- N" Y/ I .default_trigger = "default-on"," l' O3 B2 V( V0 v7 O' k* [4 g
},
0 ~) T5 p- d, E0 T' J1 u3 d {4 B9 L8 t& Z3 u( ?! ?0 B" a1 }8 [
.active_low = 0,. f2 Z9 U) w \9 M' x
.gpio = DA850_USER_LED2,
% x: c5 q+ E8 b .name = "user_led2",
: o* F; y7 w- x0 A: O$ O Y5 C .default_trigger = "default-on",
a& N6 ` a+ C( R& i. w },( R: @5 s% T$ o' Q! B
{6 t* ]8 O* y& L+ X" }& [% o
.active_low = 0,* T( u x+ z% r. n4 |
.gpio = DA850_USER_LED3,
N" A$ h0 G" N' q8 p .name = "user_led3",
% T9 H- s: U; B .default_trigger = "default-on",
5 a" e' U% `' Y( G2 f! G) M" N1 } },2 `- o! h: m: p+ X; J: N/ o
};
3 p8 K' ?& K5 V; D2 _: K% Q+ Q0 ~% j# P! |0 {( X. Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ e& @8 P* X/ I; r .leds = da850_evm_tl_leds,
9 ~; \( ]: U# o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& i- R# p' |( c M};
' u$ g' _, a4 z, n, H1 N6 ^8 r, m; j z+ L; t- y; {5 n* [
static void led_dev_release(struct device *dev)
# {0 A8 m% a% _* T" @6 \( x{/ k' k2 t V( }; P; I9 T
};
+ | h8 l( Q- d( {) ^% S7 c5 y* J# z+ e
static struct platform_device da850_evm_tl_leds_device = {
0 d6 w0 q" D$ L( z& \ .name = "leds-gpio",- ]$ `, X6 J! J G
.id = 1,, G2 d7 m5 Q. _, X2 L* G, A
.dev = {( J) q0 Z2 f4 w/ o, a% _0 ~! d8 Q
.platform_data = &da850_evm_tl_leds_pdata,
- F' P( A% n6 T5 o .release = led_dev_release,
: I- d/ h" z+ e( H% S4 b }
2 w. p, f/ ~4 V5 i8 e5 D, O};7 M8 s4 `) y% O0 l# {0 P) Q
, N) Y$ @6 R- Y; C- A: S( q
static int __init led_platform_init(void)
! g; A- x, g+ u{7 u! \1 D f3 H5 X+ b& s
int ret;( u W' r, P6 U# c) u
#if 0
3 e# ^% N% m- K2 Q& E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' o# C4 Z# Y Q
if (ret)
- T p% |, Q. R" F0 u! d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' p0 T5 F3 l S$ g8 B7 V( K
"%d\n", ret);) q; Q. C- P! n, h% {. [
#endif- z' k' j! Q7 Y/ Q2 E8 M+ B# j
ret = platform_device_register(&da850_evm_tl_leds_device);
( [3 R: P- M2 `4 ?- z if (ret)
' [( } m; [( }/ }" p pr_warning("Could not register som GPIO expander LEDS");
, Y- J5 ~3 v" \ h/ J else
% ?$ a0 O$ X1 g: b! `2 c printk(KERN_INFO "LED register sucessful!\n");
5 k4 c: H; M1 }$ V+ W/ s
9 j* u1 u/ P2 G3 q$ W return ret;; H; ]; X2 S h( B
}6 @6 ]; f6 m% `5 {/ M9 ~
8 t# W( Z2 Z" _* M$ z' | {+ C. l
static void __exit led_platform_exit(void)
$ t8 d1 Z& t# r6 h0 W! ~) X{
; a N% ~; Z+ b+ X2 h platform_device_unregister(&da850_evm_tl_leds_device);2 B- t" e, q6 l; n" M4 j% [, [
5 O: J: ?) I; i4 C( `4 O/ U printk(KERN_INFO "LED unregister!\n");+ i8 O* y% d) O
}
5 l) K2 F& l) s5 `* v4 s6 L2 R6 v0 e# M- s4 U% s3 W- v( Q
module_init(led_platform_init);8 z" l4 o9 d7 D! l' G3 s# o" Y
module_exit(led_platform_exit);, y" l. V c* t2 l) P' E
; i9 x& |/ _' }5 B# C8 v/ Z0 ~. f+ G
MODULE_DESCRIPTION("Led platform driver");" {4 i* B9 p# J* C
MODULE_AUTHOR("Tronlong");: w. c. w0 H( q/ T0 r, ~3 v& m8 @- `
MODULE_LICENSE("GPL");/ U, ~, j E* b/ R+ J; f( x
1 \- ]% L9 a/ O+ N9 t |
|