|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) J; }8 w1 B3 c. G
#include <linux/init.h>
' M" y1 m Z- N* t q8 _" n#include <linux/module.h>% y' Y4 l+ j3 H+ i- G
#include <linux/kernel.h>
7 E/ X9 d. @& p P. r7 [#include <linux/types.h>
9 s s4 X' X0 ?3 f4 R: @#include <linux/gpio.h>
, k5 j' `# H2 d' d% M" r( L#include <linux/leds.h>
( ~# \. l" T f+ w3 R* W/ H1 c#include <linux/platform_device.h># Y! N7 F( X4 I6 e
+ d( Y+ i7 ^* ]8 N* z
#include <asm/mach-types.h>
: A. Z( d: a4 G+ V) j1 @- _# b#include <asm/mach/arch.h>5 c# g' h' Q t! V! Y* Y/ u
#include <mach/da8xx.h>4 _0 h* W J0 E# h/ W) h
#include <mach/mux.h>
; {+ t+ T$ f( m" M% V/ T. K. d' r. ~: b, t4 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 e& C5 X; G2 J [9 o2 a, K' Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) Q1 \* E% X# h. R& s$ A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ e+ u, I; F9 h/ ?8 Q" s/ B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& K3 k- ?; ?' i B1 k
) D3 C& K5 `8 t8 u/* assign the tl som board LED-GPIOs*/1 ?) w# r/ H6 p2 g2 \& K$ Y" F6 }' ^
static const short da850_evm_tl_user_led_pins[] = {
& \( ~5 n3 U& \$ n+ Y$ B4 _* y- _ /* These pins are definition at <mach/mux.h> file */
& z/ o6 Z; [7 H& I$ \/ A( \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 g1 r9 w' @( o9 \% | -1
1 z* h P! F* O; g; C4 @# a};/ @) |4 _: f# l# M, D
4 c; c2 K" x3 T3 h* A) Qstatic struct gpio_led da850_evm_tl_leds[] = {
1 ]5 b9 R; `. _) ]1 {5 }$ I {
# X; g' e* C0 B* | .active_low = 0,
% q1 u6 N# L$ A/ M1 ?( o3 q .gpio = DA850_USER_LED0,6 M/ B0 G8 M5 Y- m: ?0 r
.name = "user_led0",
) l4 R6 G3 o9 |, o1 R .default_trigger = "default-on",
}4 N8 d' G0 @8 @+ j },
, n1 ^( m; i" v {
0 z# f. [; W/ A/ I .active_low = 0,4 z7 N, Q5 Q3 i
.gpio = DA850_USER_LED1,
9 ~9 w6 ?6 E) ]' I .name = "user_led1",/ o3 O C( Z. X$ _( D9 v
.default_trigger = "default-on",! y( u- @/ R* f. p( u' b6 Z
},
+ P$ j3 ^0 F% t0 X {
! ]' Z5 x3 F p .active_low = 0,4 {$ z7 E8 M8 O+ _5 {
.gpio = DA850_USER_LED2,
' H `1 A5 O4 g& M3 H .name = "user_led2",
9 b( I$ P' T: ?$ M2 f" M3 G .default_trigger = "default-on",1 A i% c/ P' n8 v
},/ ^) `* z, i% P1 r
{
8 P: d% @: E/ {0 L* E# v! N! x .active_low = 0,
" ?$ L& T" j% n" G .gpio = DA850_USER_LED3,/ m: [2 H2 o9 p" o, _$ Z/ p; Z
.name = "user_led3",: L7 X& f1 c6 B" u( ]" Q% [. o
.default_trigger = "default-on",
) \/ o$ O0 O7 A( V },: _3 [. g0 V7 O ]" ~/ e8 F, U% @
};
3 F& e K2 E$ J* T7 P# t) L. j- k' d; }8 ~ h, b6 g* E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 _: M7 x$ h( l5 w) }
.leds = da850_evm_tl_leds,' U" }4 b) v$ {% ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% Q9 Z& F$ v* [! k- o
};
0 v! c$ v9 I- N: L9 r
& g; A3 }$ O* y+ D4 i- P9 Lstatic void led_dev_release(struct device *dev): ?' W5 B0 I H9 u! q3 S- R
{
4 y5 V+ S$ f6 k% o7 M5 Z};
3 _& ^# g- U1 c2 ^5 Q5 i3 U- r
. s/ I* W4 n7 `% t* I+ n- C: Q" P4 estatic struct platform_device da850_evm_tl_leds_device = {
7 m1 d+ K+ R5 z* q' J% Q .name = "leds-gpio",7 C: y5 @. z5 [) A) c. I
.id = 1,
$ R1 w- [! l3 U u .dev = {
' j6 A6 R+ ^ W( h* m! v8 L9 q .platform_data = &da850_evm_tl_leds_pdata,3 j x) m4 x2 b7 |( z7 }: W) ]9 }
.release = led_dev_release,9 o7 v( q" T4 X& K) X8 @
}
' k. y) P: P# Z, a};" F7 o! T+ w( ]' P$ `
1 z( p2 O* b$ c. K; \static int __init led_platform_init(void)5 e8 w( J+ ?( |: N+ H# {0 k
{! n' d9 _$ J, p9 K: ^0 {
int ret;3 j/ u4 M& s7 q% J# \% l# t$ N
#if 07 r C; D, y& U: I" Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ [6 }2 n% _7 |& F7 w5 m1 o7 ~
if (ret)/ _2 W- |; K6 V3 p1 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 Q3 T5 S9 X! ~! t! h4 z9 n "%d\n", ret);
5 ?; r9 m% ~ N" x#endif2 B: t1 D1 x. G* d
ret = platform_device_register(&da850_evm_tl_leds_device);' l7 H* G3 S2 Z1 V' \
if (ret)
+ ?: ]* z) o2 ~! B2 a6 t pr_warning("Could not register som GPIO expander LEDS");
* A$ p5 `& Q' i, g/ [1 B else
1 c0 T6 o. T# g# O+ i% h- a printk(KERN_INFO "LED register sucessful!\n");9 l; C' d- D8 i
/ c. o) l5 B$ h2 e
return ret;
+ p' n F4 c) u P5 X' G/ ?! C}
4 S/ h. l2 u7 n. v, \. p r4 d
5 L' ]8 k9 z/ m8 C, R- ?static void __exit led_platform_exit(void)
# s2 d1 M/ m, A, d. m{7 b. }" s6 Q' w8 ] q
platform_device_unregister(&da850_evm_tl_leds_device);/ S; X+ z7 i+ H; W% }2 `
; `8 U# u" J3 y( v$ F: \
printk(KERN_INFO "LED unregister!\n");
$ w0 G$ Q$ u- L: S/ W3 Z& [}
2 H0 |; D0 I% V9 Z$ c1 q' T7 v+ _8 K0 e, W$ G" n
module_init(led_platform_init);3 p0 n. d; ~' f! n
module_exit(led_platform_exit);
) X) X# a: z( s2 m. [$ @$ \4 ?0 p4 U( f. s( ~
MODULE_DESCRIPTION("Led platform driver");
( b [9 s; f2 c# l9 _6 s" ?MODULE_AUTHOR("Tronlong");
+ e9 E, |/ l: b4 ~$ Z* n- \MODULE_LICENSE("GPL");; E4 F1 Y& V' ~
. c) Q" ]; ^0 m: Y/ _# F3 V$ e |
|