|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. h$ v) P* t4 z#include <linux/init.h>6 t r2 r. C; S, J' [1 g
#include <linux/module.h>
: ~$ Y& X9 u& V; j2 Q#include <linux/kernel.h>+ R9 D. {9 Y4 [* b1 F, U
#include <linux/types.h>
- s' E/ X [( b, h4 o# p- O#include <linux/gpio.h>
6 R/ u0 l7 h$ q) {0 P#include <linux/leds.h># ^/ m; B o8 w5 c$ p! I% U1 k
#include <linux/platform_device.h>) u% j6 m. f. r* [5 p v3 O$ v
* e: k5 H- P1 m% j
#include <asm/mach-types.h>
' s# H; S' L0 p L; `#include <asm/mach/arch.h>2 A3 h. l' T" C& U5 w9 U6 m
#include <mach/da8xx.h>8 J( A# R( l- _3 U1 c
#include <mach/mux.h>7 N' H! b8 t7 ~1 \: Q
6 u7 J4 ?' T- t( p) c, O5 M; a6 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) x8 \( _& ^5 L Z3 S) r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 b& \, L6 J* t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: ]4 [0 x: F- d5 N7 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! x8 R1 r3 [6 K1 h9 h; Y" a. O
) J. x: V, b2 ?' X" | {8 T
/* assign the tl som board LED-GPIOs*/
& Z, b3 b% G% r) Tstatic const short da850_evm_tl_user_led_pins[] = {
5 p. U6 ]5 r$ c, U. } /* These pins are definition at <mach/mux.h> file */8 w9 _# B: a( }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& R1 Z8 U7 u" t7 U8 x$ \ -1
8 h, n0 Q) M( |};7 ?( B' P2 ^" C6 z* T+ t' G
* l# x5 L$ e3 O4 H5 n$ `static struct gpio_led da850_evm_tl_leds[] = {5 l5 {, K3 `+ n! Q, k
{
+ O" G; z; i, k* m9 z6 K ` .active_low = 0,
6 h7 y$ ^7 L% @& G- H+ ]+ q& E" T .gpio = DA850_USER_LED0,; h! _ N! c# P }! P4 e9 `" S1 k5 @
.name = "user_led0",7 ?. Q! }& w+ m1 |9 n" z( t" h
.default_trigger = "default-on",
: t6 k4 _4 j7 o5 [$ x) N# A$ j5 b },5 @+ W* C7 W+ r4 W
{
$ }' c5 O( c! k# c' H; R+ S .active_low = 0,
8 z$ ?6 G3 T H( b9 k8 U3 q .gpio = DA850_USER_LED1,
9 L, T5 w! c! {; s8 d) E .name = "user_led1",
6 X4 V1 |$ B; X0 C- G .default_trigger = "default-on",
4 H/ u! v( G" u( A ~ },
4 E) Y: d V( R, f7 y+ w! z! Y0 G9 J {
$ ]& Z* r" o' y1 f) B: p .active_low = 0,
& y* d7 [ m% O; g .gpio = DA850_USER_LED2,
. g7 }2 Q( C. d- V8 L c' _0 ~9 S .name = "user_led2",* C: V* z. M8 Y$ X3 V
.default_trigger = "default-on",
1 g1 K9 G* l2 G; e6 s4 E( v },6 X% [% A+ h* d- X
{
! a8 {( m5 b" y0 e c) J .active_low = 0,* r. h. f9 ]8 J0 W f/ a
.gpio = DA850_USER_LED3,* g% l. x" F; [% }. o
.name = "user_led3",
' Q4 X# a2 B; _6 G .default_trigger = "default-on",
8 a3 P( D% m1 F3 S/ D },
; m& h5 p# T4 L};3 V% T- G# H: A) H; k, h; ~% D
* P0 T: N' o( Y$ F# w4 D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. Y+ X6 E: _, i% A* Q .leds = da850_evm_tl_leds,4 m; z1 x( @0 M2 b# k/ ~4 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 p! G0 N9 P# s) |+ x
};
. m3 t' [) k. r1 n
3 A" K! [1 |6 m. ]" N. dstatic void led_dev_release(struct device *dev)& O5 k0 {5 M8 o' t$ u* }
{
" l* }. M+ ^ K+ X; i3 Q; b1 D+ W};
, \3 L- I' l8 B2 R3 W
5 f7 C' c6 H9 K* ]$ kstatic struct platform_device da850_evm_tl_leds_device = {2 B3 R& ?% u7 F1 L+ z# I
.name = "leds-gpio",) w1 D) J* L+ u8 g0 G& K+ f \
.id = 1,+ ~0 u9 o( V8 J$ ~! C1 u5 j
.dev = {
: d) s" s$ u# A" ` .platform_data = &da850_evm_tl_leds_pdata,
3 x* x! r% a' Z* ]5 t! \4 C& u .release = led_dev_release,, @) i- G( n& o8 e
}. f+ i' h' {% W& y
};9 j6 ^, a+ {! v! J" q
. \" b4 R; H$ ^1 k
static int __init led_platform_init(void)
" D+ q8 l7 U! M6 I) B8 `$ E{1 f" }- C- E/ X0 n
int ret;
" @0 V% [4 |( E3 d9 i4 N5 o: E1 [ L1 s$ D#if 0
7 j$ y% ~+ d. s! j1 ^, _! `: _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 Y. W9 O4 G k+ T3 s
if (ret)
5 k, t- L# h6 D7 g) z9 E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ l$ L7 `( l5 t8 D9 j/ ? "%d\n", ret);
) j7 Y7 C: [( w2 p% j' O) N x#endif8 d. H3 l d0 |
ret = platform_device_register(&da850_evm_tl_leds_device);
/ N# o+ R! e- B if (ret)
, j2 @3 y: v; v4 G$ h% a pr_warning("Could not register som GPIO expander LEDS");
& K0 Z5 @! y J9 Z else
7 X; u1 K" @9 H printk(KERN_INFO "LED register sucessful!\n");) i! ?; w: ] z# O( z7 m
: p9 W; Y; K* R! z; N& K
return ret;
# L- _/ A+ G4 {2 J# I {5 O5 |}, n& Y/ B: d3 j' L$ M: N
9 E: C& u- t* v9 ?$ p! L0 ]
static void __exit led_platform_exit(void)
" f$ ?! e$ w2 y{
. }' Z1 M; {+ I; ^; k platform_device_unregister(&da850_evm_tl_leds_device);
: S0 Y6 f& p: w4 X( M6 m. P/ ~4 i
; E" `6 N' t" Z3 q1 o printk(KERN_INFO "LED unregister!\n");
& p9 [9 V; \3 @8 K7 e) k}3 V! z+ N. [( M. \% M3 w
# [1 ~+ C) E" i
module_init(led_platform_init);
+ M3 h& T& p$ b9 u6 zmodule_exit(led_platform_exit);7 m5 z' J. d: S& Z, A
* l( }3 ^3 {# l& Q zMODULE_DESCRIPTION("Led platform driver");7 v# J$ K- ^- f4 |3 K
MODULE_AUTHOR("Tronlong");6 T" u& N; N: K
MODULE_LICENSE("GPL");' b2 p/ {& h7 E [& i
$ }4 X P! r0 ]5 Y) b& _& J) j1 N% ]
|
|