|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ R: n' `+ s. k$ H#include <linux/init.h>
9 K( H7 ?; v. N" w% M& t* |4 s: H#include <linux/module.h>
. }: j" x( p e, \6 C5 a6 y, j#include <linux/kernel.h>4 P' z9 G; w1 [* j& G5 L8 X
#include <linux/types.h>; ^* s& y3 e4 d8 _: R L
#include <linux/gpio.h>2 m/ c8 w" ?5 L1 v) w2 @
#include <linux/leds.h>( X$ Q* r4 L0 i/ q& a) ^# t }
#include <linux/platform_device.h>; V8 ~# ~1 c" C/ Z# ^( v- U% g( [/ }
" @. p, D6 G, Q5 c7 f
#include <asm/mach-types.h>
: h: v- e' z" Y, D! u" N2 U# u#include <asm/mach/arch.h>+ D3 J) H+ t" B9 g5 i
#include <mach/da8xx.h>
7 c5 a+ G$ Z: |, r" k#include <mach/mux.h>4 g4 N. z8 T2 y* ]) Z
; i# B3 G9 g9 _5 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% W, \& [% U; H- }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 V8 j! d6 L1 N7 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% Z4 W! X3 E6 z8 X6 N# m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 z' J7 }3 r% y" q
/ K, l) S# r5 I4 ]
/* assign the tl som board LED-GPIOs*/& L- f8 k/ }2 S, q1 M* Y3 v9 D
static const short da850_evm_tl_user_led_pins[] = {
4 M: `0 v0 ~7 _* b /* These pins are definition at <mach/mux.h> file */
a, @& Z' v& v: D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 P0 h; [1 ^; ~+ i& I: H# ^ E -17 T( E7 K9 U4 E5 c3 u
};
5 g* s- _6 u6 @/ y/ k& G% K' {& t/ t/ ?) G9 z: `6 t
static struct gpio_led da850_evm_tl_leds[] = {5 {' s7 ^9 K1 q0 W8 X
{% g) |" {: t4 B8 [# c* Y
.active_low = 0,2 d! G2 b! h4 z1 }8 `& S9 j
.gpio = DA850_USER_LED0,2 j" W& \' d) u8 g) \! C' s% R: g
.name = "user_led0",
+ B4 E* B5 O/ W b* c .default_trigger = "default-on",
; Z2 x- L# @+ g },
- ?4 J, }% [0 W {2 J* w3 u3 T; ?5 [, E
.active_low = 0,
1 o5 B4 s$ d' i) \6 { .gpio = DA850_USER_LED1,4 g5 h5 P' u3 Y
.name = "user_led1", A) G/ I1 f; F' Q4 D
.default_trigger = "default-on",- a" h, G8 N' x3 F- |
},- V. f6 D2 z. l$ |' g; M
{5 s7 \+ L# k( ^: K) K) E! J( K
.active_low = 0,
- E! u0 F2 i7 K .gpio = DA850_USER_LED2,. g3 R. i" `6 K( x
.name = "user_led2",
' H5 e; p* W5 {. [0 b .default_trigger = "default-on",8 @. b9 a# O3 f' c' P U
},; {2 }/ W5 W! M) O' Y1 v
{# M2 ?# i; l5 i1 F2 D- o8 k
.active_low = 0,
$ `/ o$ q' g w# Z .gpio = DA850_USER_LED3,- j! ^# v8 D: G( l$ F. H! E1 |
.name = "user_led3",
0 D; S& t( V9 S c+ A% A .default_trigger = "default-on",
% n8 h, F9 }' s+ W },
) `5 Y9 H/ r! s; p, {* ?. p};
# [$ U* z+ @& ]# `3 r3 P6 j6 M6 J3 r+ S1 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 p5 T0 ~! T( T
.leds = da850_evm_tl_leds,/ ~! @5 B% T6 M. H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 W3 _# b. q% T4 |' }5 x2 W& f+ ]" b/ W};* W( [2 k$ W5 E% `; d) _$ b2 z/ G
" P- _9 m6 }% T& Y7 N9 Bstatic void led_dev_release(struct device *dev)- _; D& t8 H+ u1 J& _; ~ D
{ ]8 G4 \3 Y5 t* m. {- s
};
4 e3 M% x- ]3 ]" r- G# s4 _
4 l* F+ h. \& P3 ?& Y5 L$ Dstatic struct platform_device da850_evm_tl_leds_device = {
/ F7 s3 y; J* q8 ` .name = "leds-gpio",
& d( o: E) q$ b/ ?- Y% T [' C .id = 1,3 r: C6 n A! Y5 C
.dev = {
! p7 e# i' Q3 g0 ]9 i6 D! O .platform_data = &da850_evm_tl_leds_pdata,
$ J. D% ?* x5 Y% ]0 g, T# Z .release = led_dev_release,
+ z: B! r/ G* H7 N2 s/ ?2 L( X }4 x" S/ ^' ]$ F' r9 V F' T
};3 w: g E+ p, r7 @
; L' W/ B( q9 Ostatic int __init led_platform_init(void)
2 J M J: E, q0 o" O1 c{3 C8 q# d2 i/ N' C0 ^3 L) p
int ret;& e4 U$ ^9 ~$ k5 D
#if 0
! \; E1 M* a( e& v# o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ i( d- `( g) v* ]% z) }/ r B
if (ret)
" ^: U8 k% s, x+ L& D1 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% e/ e9 w, a# j7 S0 x "%d\n", ret);
/ s! j1 ~; b+ ^- f" J3 J3 {: a#endif
6 q5 M6 J2 \" T' B! `" c, V ret = platform_device_register(&da850_evm_tl_leds_device);
7 ?1 z8 K, W& |. [9 T2 A if (ret)$ u0 M' v9 H3 Z# w
pr_warning("Could not register som GPIO expander LEDS");
3 C, ]) C. H [2 X! T else
* u) }; c- N5 [$ i9 c printk(KERN_INFO "LED register sucessful!\n");/ E8 W$ z$ Z/ o; b+ X& Z
8 t, p' p1 f; @/ o' v return ret;7 N9 R8 Y& m: z* u& b7 @
}* K+ q7 w, f: L7 t' Y- {4 b
; M! ?% \' T- \) ^5 l8 F8 ^0 m& estatic void __exit led_platform_exit(void)
( s, _0 R+ C5 @3 V{
9 f* W9 W0 B! ?1 M platform_device_unregister(&da850_evm_tl_leds_device);- y2 Q# d' V! v& S0 Q m9 T2 d
+ h$ h. d) y5 S% F+ Y
printk(KERN_INFO "LED unregister!\n");; O1 k0 h% m' { F3 J. @
}
9 A- d6 \" o2 ^
4 C8 r: P8 y! W V ^/ B5 i% Emodule_init(led_platform_init);: P! D( Z' }0 J( X# H4 ~ C7 Q! ?
module_exit(led_platform_exit);
4 b1 t+ ~! o: X% o# {4 j1 s# \: _: p% H0 x! d3 @- o% J
MODULE_DESCRIPTION("Led platform driver");3 S1 E" F9 ?( D0 @
MODULE_AUTHOR("Tronlong");
: K% [, Z' K# M* XMODULE_LICENSE("GPL");; k8 m+ C1 m- q5 G. l
' P1 e' u* s F( h% n |
|