|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 s- B! ^( x$ O
#include <linux/init.h>$ w) j1 M$ R7 T3 E7 G% v
#include <linux/module.h>
& g6 r! X, O! G( W: q7 k/ D. C#include <linux/kernel.h>9 ]4 `. \3 M9 p9 Y- U0 m
#include <linux/types.h>
5 M* x( r. k9 z#include <linux/gpio.h>
$ q( Q& x& e/ }$ ^1 r) ]/ v#include <linux/leds.h>
1 v' ]) F% N2 K, I$ w8 f#include <linux/platform_device.h>, G2 k) ]- X5 }) v
: L+ y: g( b0 q% b
#include <asm/mach-types.h>
3 F/ W) Y2 X+ E0 v9 U#include <asm/mach/arch.h># K6 b t8 L' X2 N4 |" r% A! R
#include <mach/da8xx.h>
0 M# h7 Q2 {2 }0 r& w2 p#include <mach/mux.h>
/ h0 w$ F7 e/ f2 D8 y& E3 E
( N: A8 l; \' w9 b' X7 x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" o8 \& `. C1 D# H0 ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 s( `. C7 p% D0 ]4 ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' ^/ B6 j9 x6 U! I* ^/ a$ b3 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). j ] e% [+ T4 d
4 D) F* @ J! l- B" y
/* assign the tl som board LED-GPIOs*/
1 q6 }/ @9 R0 p% @: L3 p; ustatic const short da850_evm_tl_user_led_pins[] = {* k9 k: s$ p% D; n$ ?/ g
/* These pins are definition at <mach/mux.h> file */
" r0 ^+ P" ^1 v0 M8 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, I) r3 |8 R3 Y( P -1* F/ }4 V) U; S" z
};
4 h! H- m r+ t: C6 F: [6 `' F
2 w/ S9 b% G! y6 O, Xstatic struct gpio_led da850_evm_tl_leds[] = {* W% [% t6 A/ N! h" p
{7 p/ R; Y( l: E( ]
.active_low = 0,! ^- g# Q/ |5 ~5 J" w5 Z
.gpio = DA850_USER_LED0,
j$ h$ J% i1 B* P6 u) P2 ]% @, J0 t2 Z$ _ .name = "user_led0",! S3 a. D! A3 e, `
.default_trigger = "default-on",
4 O2 M* ~7 T, U2 k" H. L5 W },
+ f( @8 r0 R: t Y {
$ D& D2 z# f& O: V" ?# _0 h2 b .active_low = 0,% E) f2 f# Q2 a4 f
.gpio = DA850_USER_LED1,, u& L' z( W& b3 ~2 | K- d3 T
.name = "user_led1",3 ?" l1 [3 a9 e( ^
.default_trigger = "default-on",
$ |6 i! _8 n) }3 N' o },% ~0 ~# k+ N% I3 C8 M* W
{% X! b- G+ T: B _1 V; V
.active_low = 0, }3 p0 m Y/ R" Y
.gpio = DA850_USER_LED2,4 N {: i' d* @, [- ?! l. H
.name = "user_led2",
5 @: Q% e- R6 l2 m, @- O9 h2 [ .default_trigger = "default-on",/ B2 j; b+ O9 o. Y
},
# ` Q/ Q5 b0 d {
5 p) c, F7 U3 h/ H t9 ]2 y; l K .active_low = 0,, L. B2 N, T, C* ^
.gpio = DA850_USER_LED3,
% t3 A u# L W8 ^) R7 p+ h .name = "user_led3",2 H0 T X. ^, p: @% v
.default_trigger = "default-on",
7 h1 d- W6 W. k- J i },4 }8 }. H8 j! g
};) c/ B6 C5 |5 }2 l4 A, ?. C" F
) ~3 J* k5 M$ s* k0 y% W) R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 z: ]# |( F/ v4 j6 Z, m .leds = da850_evm_tl_leds,/ u& |$ w- ^6 X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ w" t7 D/ u* v8 [! |# f};- B) p! P( C* e7 ]$ e1 H* O
* L0 i7 U8 Y0 p/ h
static void led_dev_release(struct device *dev)
" P! E$ N+ Y3 f$ h# R{
; G+ U3 k/ g4 [};
. c& N# N& N- @$ ^% Z
O" V7 j9 a3 R+ }) S& jstatic struct platform_device da850_evm_tl_leds_device = {
% B6 M% E2 ~) e9 b+ U- q .name = "leds-gpio",
0 u& B" F4 z+ y& {+ m# e .id = 1,! q$ b, z7 N( G) }' w/ |
.dev = {
1 m E8 o( C) l; O5 c# M1 x .platform_data = &da850_evm_tl_leds_pdata,3 j' y+ T2 o4 @( z$ H/ @& w
.release = led_dev_release,
, N; _1 F6 f; \" w }
4 m' F, H9 b1 p( A5 S/ n};# a! Y/ T7 X* h# f$ R$ N! h- T
2 x& g6 w4 d7 } x
static int __init led_platform_init(void)
$ y1 O F+ @$ Z' Y{
/ C3 Q- O" }& o7 i1 r8 G0 v int ret;* f! t" g0 Q( N. Q$ T' u6 C' w
#if 0. J7 D7 v! E# c6 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. z: O. {( F$ h if (ret)
8 `7 v+ m3 j" R) ]2 v" ]) r6 R- a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( c& d+ o/ g9 E4 q( H0 [8 s "%d\n", ret);
3 [: O" T: J) l5 c, ]1 b#endif
$ v6 z9 T- d. L; B9 w0 E+ K% i+ k ret = platform_device_register(&da850_evm_tl_leds_device);/ ~9 G, e" A- b& o8 m( ^
if (ret)
1 I- s' G+ w9 E+ `, Y* T- o pr_warning("Could not register som GPIO expander LEDS");
: e6 ^: [* q( |" m' |) C1 o else V1 Z7 ~0 V/ { a( J
printk(KERN_INFO "LED register sucessful!\n");
i5 v4 n0 F# o+ m. ~$ Z4 e5 K( D6 p5 ^; y& z) k' Z* V: d
return ret;% Q5 @2 V, t' o% Z8 r1 P/ t
}# \8 m+ t* U7 { h$ E9 w
& s* `" x ?+ C+ G! e4 k$ J4 m
static void __exit led_platform_exit(void)
1 {/ [& p/ T+ m( a6 g{
% Q; K6 K0 g: c0 F# g9 U platform_device_unregister(&da850_evm_tl_leds_device);/ w' k6 } \. `9 k4 w
% I/ I0 L) \# w# I printk(KERN_INFO "LED unregister!\n");: A9 M- i* q; z* x7 K3 Y6 m
}
+ K W& ~5 `8 D/ I' i) F8 ?4 j6 G8 V; L" J1 Y: C
module_init(led_platform_init);
: G" V( ?+ O* U. E+ Ymodule_exit(led_platform_exit);% j. l: s7 K- y. g0 r
: h. x% B# x5 C3 |
MODULE_DESCRIPTION("Led platform driver");7 A- w( y( L9 r: b* Y( |- @
MODULE_AUTHOR("Tronlong");; D3 j9 M Q+ R
MODULE_LICENSE("GPL");
% I8 l) D" a+ Y0 S
) u( A/ a5 B5 z9 d' p |
|