|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 g: s( _) S( J
#include <linux/init.h>/ k7 I3 P! r4 B, m0 V# B
#include <linux/module.h>
# r. {3 u6 n% t' z# b#include <linux/kernel.h># Y6 s/ y& f( G5 G" G7 O n
#include <linux/types.h>
5 g9 M: z' A2 A3 z8 x \#include <linux/gpio.h>
: B I! K' _+ M( e( N* ?" R#include <linux/leds.h>
: N4 J8 b c0 O9 K1 u/ r# A#include <linux/platform_device.h>, B- h9 Q& ]( c. H6 l
( U$ }9 O( ]: \3 {2 }9 v
#include <asm/mach-types.h>. @7 _% I" Z0 D
#include <asm/mach/arch.h>
4 v$ t' h' k' Y! P- C. _, S P#include <mach/da8xx.h>
: g2 l1 Z1 r7 `! r& l3 M+ e1 Q#include <mach/mux.h>
0 u3 K+ v2 x' i* ]3 z/ ~8 Z4 y, G7 s4 S: Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& T+ a! Y' @6 H. Q( D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- ~+ ]0 S/ n$ [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 u f" q6 O d' N/ J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# q |+ k; o$ O$ m- S# v4 \6 A
1 R& k2 A2 d0 w' \: u% C/* assign the tl som board LED-GPIOs*/; @ }- Y% ^' f: n7 V
static const short da850_evm_tl_user_led_pins[] = {
5 Z4 A$ M* p2 \ ^* _ /* These pins are definition at <mach/mux.h> file */! ^ s! `4 ?0 x, k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# v* D' X, ]6 I8 f -1* d+ ^$ v7 e( b* n. U
};( |( `# o8 S, _9 {6 w. y
; L7 ]; r" B* _! m- U9 c* S7 ?; I- b0 }
static struct gpio_led da850_evm_tl_leds[] = {
$ j; ?/ k3 Z, ^- A4 h0 @7 @ {; V, I1 P8 f3 M
.active_low = 0,
; ] n* B' z& u$ {6 W( ^2 Q( [ .gpio = DA850_USER_LED0,
& v5 v" c4 j. P" n5 K: @9 t5 N .name = "user_led0",
; l' }6 ^ T0 X1 {: }7 z& y/ F .default_trigger = "default-on",
: y5 p3 o/ G, N% A' D9 S" \ },6 V9 t2 Z9 L! d
{- | i7 \0 F6 [* o2 x3 Q4 T
.active_low = 0,
# U+ M. e* K- d9 e! T .gpio = DA850_USER_LED1,. ^5 E6 e) c+ v) R" h( }; l
.name = "user_led1",2 z( H+ {, t4 u7 ?/ d# y
.default_trigger = "default-on",' H% o5 G W( y1 ~6 b4 C( O
},
: O# \/ o w% m {
2 W) `+ @# r8 k8 Q% h .active_low = 0,: U; b( i" n; c0 t" j: i: e4 u, q: G
.gpio = DA850_USER_LED2,9 R3 p; D) _6 [# V+ a% G1 ^0 X
.name = "user_led2",
8 Y! Q% }9 W: V* f8 N. l .default_trigger = "default-on",
/ z" b R+ e6 S5 [ },+ k3 a0 t3 f/ M z" {& h2 x% q
{
0 B# Q# V# E/ S( D0 D# U9 R& a h .active_low = 0,: u0 L' |9 j# C; c6 u
.gpio = DA850_USER_LED3,
* [3 N. }$ f6 N2 }& k& L .name = "user_led3",5 L5 }" W7 G' V, D9 }9 g$ Q/ X
.default_trigger = "default-on",) t. r4 n( ]$ h* X
},5 N5 N) ~4 I$ m G! y9 ?5 Z6 a
};' y" ]" G$ k1 W$ M7 R2 T3 b$ n
2 [; ~! ? M, s. c' wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ M* E. ~8 m4 B. v! s7 }4 ?6 \! @3 q .leds = da850_evm_tl_leds,
$ u1 b3 C: z$ R' ?, Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; G' `3 z- l3 i};
; b. D$ y$ }( u! f% A9 s3 M
# a: s! U1 M, j3 u) c, U0 F- b2 ^6 J) wstatic void led_dev_release(struct device *dev)
# N* @" X0 o0 e5 X, W$ ]! p* Z{
5 C4 ~6 U0 e$ Y0 ]) {};1 T, v6 W v8 j& p. u% T# O& G- r
) h; j* R# d2 ~3 L" l0 W
static struct platform_device da850_evm_tl_leds_device = {! Y! ^7 N0 K3 P& K! R0 |; ?+ M1 }
.name = "leds-gpio",
8 |& m1 R }# p( r' ?- u+ ~ .id = 1,' E+ M4 o8 T5 w- @, @' | h
.dev = {
$ M# \+ ?+ U" H7 a .platform_data = &da850_evm_tl_leds_pdata,
2 B m2 A2 Q2 X0 K3 D# } .release = led_dev_release,
! n6 i4 p1 q4 X D5 L, j }+ j# i2 i4 _) P# }7 _4 o
};
: C2 k! L+ n. g+ y1 U
# I! h5 c1 m& p9 kstatic int __init led_platform_init(void)
) H2 c" f# W6 H7 |{, C n3 J6 f' C) D' o- n9 k
int ret;" V$ k* D# r/ |; i9 Z
#if 0
- f; ~& X- ~0 W9 y' w8 P9 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ g" S' {# F& n* p# T' n$ a" X2 \! p if (ret)
8 P" y1 W b; s( I( s1 g2 Z# e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ j7 v" D B( g4 R9 q "%d\n", ret);; [0 J( ^4 Q4 g8 n2 n7 R' |
#endif
* w4 E; X& Y5 r ret = platform_device_register(&da850_evm_tl_leds_device);
8 n8 y8 l- z, U5 x: f1 p if (ret), d, |) h' G5 N* }
pr_warning("Could not register som GPIO expander LEDS");
7 S0 x& ?9 o' |2 G, Y else3 e k1 Z& C# [$ f4 Y6 U. y
printk(KERN_INFO "LED register sucessful!\n");
: x6 Y1 Q- t# b( b s! m% E& A# j8 ^* q; J1 k7 h( C+ s& y
return ret;( F0 V# v+ F. a3 C9 `$ a4 Z+ K
}" C2 Q) s" h M, _: }8 |, T$ Q
9 f Q9 X5 v8 N+ |5 M3 f) M) \, Kstatic void __exit led_platform_exit(void)
" Y* h# [3 o" [7 P& z+ p% }{5 ?& J) b1 q/ [8 `6 v) g
platform_device_unregister(&da850_evm_tl_leds_device);/ k" J1 y) y/ Q3 x
+ k2 J- x& H3 R8 i3 W
printk(KERN_INFO "LED unregister!\n");- n1 |$ v0 n' |1 E; Y# @) Q. _
} s; _! b5 Z* O" `4 @/ K/ h+ S5 `
# T4 G' ~* H0 |/ N$ ~3 Emodule_init(led_platform_init);2 J+ R5 a' D% X* H3 ?( c
module_exit(led_platform_exit);
3 U$ h5 d* G2 @/ H1 L. E0 _# Q5 u
) m$ Z7 ^$ m% d0 W5 O1 d8 BMODULE_DESCRIPTION("Led platform driver");
" L- h: V& j3 P) W. WMODULE_AUTHOR("Tronlong");
2 N9 q M4 U) OMODULE_LICENSE("GPL");+ _* C$ F' t. ^- U
2 t# M& ~7 U- Q" \5 C2 N8 ` |
|