|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& H- K& P! B: w
#include <linux/init.h># V$ |* a' N! W1 V! E9 a
#include <linux/module.h>
/ j+ e. i( @7 g3 W5 I: j; ]#include <linux/kernel.h>! W2 V% ^! T+ W; \+ h) c3 T) d
#include <linux/types.h>* j! ? o$ }. @) ] m3 H6 i- j3 g
#include <linux/gpio.h> s) G/ L; Y0 z; W* V% v
#include <linux/leds.h>$ K* q) u ], X, m$ G- w, ]& Q
#include <linux/platform_device.h>) j0 F: O$ W) x d7 g3 Y. c
% n b/ O9 y: g2 u8 L7 e# F
#include <asm/mach-types.h> c4 I; n: n, X4 N: j. o
#include <asm/mach/arch.h>0 e! w& Q. ~, D( T
#include <mach/da8xx.h>
$ r# r3 p$ U9 z6 y1 \ O0 ^4 S Q#include <mach/mux.h>
2 r; C' X# d0 x3 m, z
' X3 @* S% U& p5 F! Q* t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 ]; K! d5 k5 e( H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' [- S Z0 e" q/ x V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" s- R5 {% U+ N% H( X# _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! ^- y( _* l9 W$ R4 `
4 F; E& S K {8 |' C
/* assign the tl som board LED-GPIOs*/
- V. b [3 U/ @7 wstatic const short da850_evm_tl_user_led_pins[] = {/ Z+ M% b; u. J% F) F# {0 E
/* These pins are definition at <mach/mux.h> file */
" ?+ ]. Z3 h4 n1 s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 d$ d) X2 w4 v -1
' L$ _6 [! j: K1 O};+ y; h5 d L5 X; {5 N& W7 W# k
1 l( S# J G% C( w3 I" S- h( ystatic struct gpio_led da850_evm_tl_leds[] = {
$ o* ^0 a$ C4 Z. D! u {
1 K2 o2 y6 B5 V .active_low = 0,, x1 N# p: _# \
.gpio = DA850_USER_LED0,
* C' V7 E( {# s; _; ~ .name = "user_led0",1 ]5 r( Q9 O! u2 [% _1 I7 a C1 _# w5 D
.default_trigger = "default-on",# h) Y* S" W+ c% u, C! v6 s! C
},
0 D+ U- E/ S& D6 x* u {
5 l8 C" p3 r% R( l2 T .active_low = 0,9 B+ T) a0 Y1 O- H
.gpio = DA850_USER_LED1,
8 _) e, i5 a7 Y% ]7 D .name = "user_led1",
3 T4 n2 g+ M" w7 b# F4 H/ G .default_trigger = "default-on",
8 _2 k" v; J, D },
9 y; D0 n( {4 b6 [: r {- [6 V9 p6 h% I: Z; E8 _& P# K& {
.active_low = 0,7 l0 a9 W5 b1 H; ?* `
.gpio = DA850_USER_LED2,
7 ]! W+ ^- |* w% u s' i' J .name = "user_led2",# t. w0 _7 n0 Z% c: C& d4 z& c
.default_trigger = "default-on",
5 y/ z7 }, V# {4 B3 _6 ]& R( z },
! T1 ?# O+ v) q' c5 t" N {
! s2 L4 N+ j, ?6 A. n2 E2 Q .active_low = 0,
1 u2 [* n$ V1 E9 T8 z1 _ .gpio = DA850_USER_LED3,( U. G; J$ h( s6 ]0 q0 U
.name = "user_led3",
6 V0 l1 l9 j! L, O1 X .default_trigger = "default-on",* r4 G) m: _6 h8 q" g, L
},
" U2 v+ G! _# j* r4 I2 k};
) _ A( S5 j5 k4 \2 `. a) O& A9 D* S1 x5 u. _3 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ K' [$ i ^8 U1 w5 B# Q9 { .leds = da850_evm_tl_leds,( L! Y1 O* ]4 h$ {3 ]# D) ?* f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. ~ v9 k9 z$ ~# a+ e
};
0 H0 p* o8 q) t5 G7 H: h! k m8 a6 N4 \; ~9 _2 a$ P& F( u
static void led_dev_release(struct device *dev)
3 M" O3 Y* f' a1 k9 a6 a{
. R# T; o3 `5 R};% g+ ]* t2 c- ], y3 q9 {
8 A P# [) H/ M0 q1 H( Q) wstatic struct platform_device da850_evm_tl_leds_device = {
" V" _/ c6 ~! F% U. {( X! U, S4 U .name = "leds-gpio",
7 c o; G2 P. d" V; C4 r2 ^ .id = 1,9 [" k* W! x0 n% S2 D+ I. s
.dev = {
Z' o2 T: [) x2 s, C' u0 N .platform_data = &da850_evm_tl_leds_pdata,. a* d# C- u2 d1 r7 S6 T
.release = led_dev_release," G( m( s _8 c8 v2 I' q0 @
}) y" \; A/ s! ?& R: J$ @
};& }6 n/ E G, s/ P
; N* O6 {9 d/ A. i9 }static int __init led_platform_init(void)
0 K+ m% [. h: p{
7 M* P. h) W0 M1 ], C: \5 ^8 U int ret;/ n& p& k. z5 y$ C+ _4 A9 l! y
#if 07 V+ s1 Z8 _1 x, g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. \, G1 Y- V* W t K8 U+ e5 [
if (ret)! o% [4 y! S, a- B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 Q, b, ]; n: \7 X "%d\n", ret);: J, R1 V3 }+ M7 u: F
#endif# ^) ^. P0 F6 M/ `) ? Y
ret = platform_device_register(&da850_evm_tl_leds_device);4 U* m$ O2 p8 K: M9 L7 W% H
if (ret)) m3 W0 s5 c2 I$ E8 C$ f" L
pr_warning("Could not register som GPIO expander LEDS");
: q1 T' x6 z8 [" M% R else
" l& H: A1 s i3 n- U5 T printk(KERN_INFO "LED register sucessful!\n");
0 Z& I9 E! d" C' O7 I; _5 R
! ?6 O7 r; h% \2 Y T: ]8 T O+ M return ret;
- o9 s- I, ]$ W6 ~4 E}/ y- i* e7 f& T, a% j/ i* e# ?, b
; w) V5 m4 t0 m6 @# ustatic void __exit led_platform_exit(void)& X/ f2 y t" }/ d* o; D" F
{4 @; z. C# C* E4 R- `5 p3 M
platform_device_unregister(&da850_evm_tl_leds_device);: c9 h9 R l: d1 r( ~+ Y% L
3 U; Z+ d7 [) r h& Q: _3 ]
printk(KERN_INFO "LED unregister!\n");7 V7 N' z( \3 {$ |
}' W! F; t2 F0 r3 L w6 r R
3 n3 t* |- u/ D4 o' ?; w
module_init(led_platform_init);
( G* C. t2 p0 x6 X2 omodule_exit(led_platform_exit);
, h k8 u/ r1 @! u# b$ `4 _
" i" X0 w7 }; x# T+ k/ EMODULE_DESCRIPTION("Led platform driver");9 O$ [4 G6 \' p p
MODULE_AUTHOR("Tronlong");; R: ^" l Q7 v/ Y9 Q$ J
MODULE_LICENSE("GPL");5 l0 ~5 H4 N( W
1 Y8 b* h$ n* F) r1 f$ N
|
|