|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. }" N, ?8 o0 r) V0 a' b1 t, j
#include <linux/init.h>, u6 \5 y/ K2 [$ Z" j8 q
#include <linux/module.h>
. Q8 ] o, f7 O$ @, Z- J#include <linux/kernel.h>
, i- K- l, G6 e: V4 e; Z0 T( L6 g( a* o#include <linux/types.h>
/ L$ y! O }' f1 f#include <linux/gpio.h>
1 z3 ]4 m; w a8 x2 c+ }+ ]#include <linux/leds.h>, [8 |6 d& a9 s( b6 ]1 t! G/ p C; w$ i
#include <linux/platform_device.h>! u& E! k: H5 X! l6 h8 P, u
; ]& }3 `; o; F' S#include <asm/mach-types.h>! C& U* f. W, \
#include <asm/mach/arch.h>
2 t3 g3 R" b4 L v#include <mach/da8xx.h>
# Z5 ~/ e5 }+ M( C, P; V#include <mach/mux.h>) V7 A, ~8 A7 k; u
4 B9 Q# ]0 g: y/ p1 X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: P! L- }4 k* a; P8 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 g& R6 Y7 ?5 q6 [8 y9 N3 f( c% i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- D& C) F1 s) E) m6 K% f( |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* U8 w7 x" s# X' c" C
# W8 r9 o+ a' X7 a+ l/* assign the tl som board LED-GPIOs*/9 \) E5 I5 K5 A) i- z9 L6 F) o& w
static const short da850_evm_tl_user_led_pins[] = {
' @' F2 z4 F0 Y# X! H9 |2 R /* These pins are definition at <mach/mux.h> file */
. N/ w9 t7 v& e. ^' n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ V& G7 x: i8 _* s
-1
7 Y0 o$ k* a/ W};: z6 q" T: B9 Z
' i9 R; }: ^7 ?! Q0 H. ~static struct gpio_led da850_evm_tl_leds[] = {
. H4 p7 }$ o$ c% ^ {4 s1 m. l1 L8 @) ^% I
.active_low = 0,
5 V, E$ n% [" [2 `( l" g1 v .gpio = DA850_USER_LED0,% l j/ c3 W$ s* Y+ C R% I" {) o: z
.name = "user_led0",
) R8 {& M f3 v8 _" x1 z1 N .default_trigger = "default-on",' x }$ k. R1 z1 v+ a8 I2 T
},- g/ H" z, P) k. W8 |( S
{( Q4 R) K1 q/ j2 U. `) a+ v
.active_low = 0," ^) y9 U1 z* [
.gpio = DA850_USER_LED1,
; o, N3 \: \; w9 M) n k .name = "user_led1",
% e' ~- i) @, {( z .default_trigger = "default-on",
2 t0 I! }& X6 o k },
- n5 N# G& L) V' `. z$ p+ e8 E4 K6 H {% d& ~5 _$ A' C5 A. R4 h+ @
.active_low = 0,
$ M. p0 {2 k9 V" t1 [$ Y5 ] .gpio = DA850_USER_LED2,
% D) _6 K- A3 n .name = "user_led2",
" e' [( W- O1 X, [9 y( w .default_trigger = "default-on",
5 B! z( _4 a, ^2 [6 i6 ~ },
( Z) @8 s- ?) X u) |) u1 Q {! H% p3 O5 F, H, b: }
.active_low = 0,2 c0 N- m0 ^$ ?$ ]7 `% Y
.gpio = DA850_USER_LED3,
. ]+ V- b* Q& R1 W3 Y .name = "user_led3",2 N/ Q) x2 Q( J4 \. i, [1 X3 A
.default_trigger = "default-on",0 t& D6 ?- m9 Z4 d: D f( B. {4 h' B
},( x8 r9 H% M& i' i# u$ e* ]
};
) T# J) \8 F' `; L" p( F! |. j2 T5 N! ]" P% U w) {9 ?6 x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) U' f' i+ k- j( m
.leds = da850_evm_tl_leds,7 }1 e+ _4 P+ u) X7 L: r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( R9 Z& x1 @& D3 C$ m};* g7 T5 \# Y2 \$ L# d
3 T+ l; |; a# N7 Q W& ?+ ^
static void led_dev_release(struct device *dev)
; N* d, w8 b* ]+ G' v# a{! a( T% b" {4 X; y% k V( x6 s
};7 u6 R; e& |- D# r# T* \: z( d. k( U, V; E4 u
/ G: `/ ]; P0 {( {' b$ \
static struct platform_device da850_evm_tl_leds_device = {0 W& K' H6 K5 e( }3 l/ m. v
.name = "leds-gpio",, _7 c4 @: n, r1 S* ~/ [! r
.id = 1,7 n2 W$ T; c) ?( y( \. a' i9 H' c
.dev = {
$ {0 X. V3 k a4 B1 i0 J& O .platform_data = &da850_evm_tl_leds_pdata,
1 j/ ?: W0 e, c7 |+ P( h: M .release = led_dev_release,9 [- K3 K: L) }# s5 \
}
9 {. d; V# z& G! F5 q; k/ U B$ x};
3 x5 [7 C6 g$ e% A
9 f, D, n+ J' G! t' Sstatic int __init led_platform_init(void)9 M! z6 i. R4 l5 T- ^. x3 h
{, H( d: i3 C- \
int ret;
( Y# A* T6 `3 A4 D( W1 T1 z4 P#if 0" h! m) q, Y1 L! B6 a; q2 ?: Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' `: Y( r( [* m5 C6 [6 i& e if (ret)5 c, e" R {2 u' |( u" s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& ^: Y3 ~5 w$ q0 _+ N5 t
"%d\n", ret);' {9 F2 b$ s1 n$ }
#endif; L# S5 p1 d/ c7 H
ret = platform_device_register(&da850_evm_tl_leds_device);
' m6 r5 x9 K) L& s8 T: i! ? ]# [ if (ret)4 ^3 c5 j9 H/ r8 P. o' n
pr_warning("Could not register som GPIO expander LEDS");
3 \, z7 r8 T) h5 n/ x0 Q4 S else- @& k! ?* i& O9 ? e6 s E+ h
printk(KERN_INFO "LED register sucessful!\n");
! a! a9 d% w& }
' N; U# Z3 c m; z. V. R( W return ret;" | ^/ J+ H' B4 O" U
}! h5 N1 n9 @" _8 F X7 Q" y
/ n* B* p ^6 O; H) p: a7 q) z
static void __exit led_platform_exit(void)
1 F# H9 u- F2 Z{
2 k6 f" f* I! N* g/ U2 d platform_device_unregister(&da850_evm_tl_leds_device);
: ]+ K4 G8 I) U$ _* |2 Z* U
# l$ r" j$ P& a5 S( N5 o8 a J4 { printk(KERN_INFO "LED unregister!\n");
! ^- N8 v9 C! s |' \: z. k}
" ?4 j+ L6 @6 Z R
; N ~, e" T, p: F5 ]module_init(led_platform_init);% P/ ~/ v& b8 m0 K7 Q
module_exit(led_platform_exit);* I- ^7 x$ e' q: K
$ s& t. S$ E, O% N' [1 yMODULE_DESCRIPTION("Led platform driver");9 A( D6 w( K5 E x. z9 Y4 t0 h% o
MODULE_AUTHOR("Tronlong");
* c. Y9 ?+ N( w; o4 @, X I1 W8 mMODULE_LICENSE("GPL");
m) z, v: o3 O$ r7 u+ E1 Y) E& g; D+ m0 K
|
|