|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 K2 _5 f q& {$ d9 d0 M8 c#include <linux/init.h>
2 K0 p- ^5 |0 X% W$ d M( f#include <linux/module.h>! s$ [# ~" Z$ w+ [4 ^/ Y( I
#include <linux/kernel.h>
9 S$ v. c- `6 V9 e: X#include <linux/types.h>' t6 l/ z) f9 e4 j* p; j6 W, s
#include <linux/gpio.h>7 }8 r1 o$ h4 `: M' _2 m! I
#include <linux/leds.h>/ K5 z* q, k, [! \
#include <linux/platform_device.h>
' V, E q/ z+ J# D
0 o0 x. D" L: w M) `. @#include <asm/mach-types.h>7 |9 j; U: G( H0 l; m2 H1 \
#include <asm/mach/arch.h>
5 k* g; g( d$ f8 D3 f' r& A#include <mach/da8xx.h>
3 ^. B4 S/ x! d9 \: z' e' _+ S#include <mach/mux.h>- s' d5 C0 X+ @& f" w* @ S
9 C9 p4 d+ j1 y! {2 ]- Y: ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 \/ ^3 Q+ h' W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 z' `; Y" o% y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 T' W% K3 S1 V0 w! S# o$ r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 Q+ o: C+ j) ?! g* \. o* k; t p+ g$ i; N% u) s2 G. Q+ Z8 n. ]) r
/* assign the tl som board LED-GPIOs*/
+ J3 @. F2 k- C# L+ B7 g* Pstatic const short da850_evm_tl_user_led_pins[] = {
$ t$ ~2 p, C# f0 H9 b8 p. Q /* These pins are definition at <mach/mux.h> file */
" [+ y: Z+ B( V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- P4 j; i9 F# b! u. d: U
-1
) X4 m, ^* ~% e$ a8 A1 R2 |% L};1 T9 g$ l; u3 U2 }- t
% ^# w& u$ y Dstatic struct gpio_led da850_evm_tl_leds[] = { C$ F% G+ ]$ N d
{- ]) A* P w+ ^( M4 i7 o% d" Q
.active_low = 0,, e2 z/ x" H, [# ?
.gpio = DA850_USER_LED0,; I, g! t5 Y8 w- n8 a
.name = "user_led0",* o6 O8 P. x0 e. G( K
.default_trigger = "default-on",
+ r2 P7 p3 J7 M8 X2 { },3 o1 |- ?$ _6 v+ T# [' K2 ^ M
{! {5 i, J$ P( j t _" T: L! F
.active_low = 0,
' O1 d( ?% R+ w8 N .gpio = DA850_USER_LED1,
7 L: f0 }+ e4 B; J8 P9 j .name = "user_led1",, M) m, q/ e. y" b u) x/ Z8 M
.default_trigger = "default-on",: Q9 Z1 P! l8 i1 Q+ [
}, i; w( e' ]5 ?; z: X
{
5 @, i! \9 n% F* D8 q2 _ .active_low = 0,
/ k" o4 y# L4 G; W6 p: | .gpio = DA850_USER_LED2,
4 h" O- V" l& I+ A .name = "user_led2",$ ~! a* L1 q$ R
.default_trigger = "default-on",$ l7 R. }# e; n0 W5 c! b7 ^8 m% G" v
}," ^" _, `& F7 I/ B) R
{
+ V0 l5 \. F! Y# ?5 g4 j .active_low = 0,
( {2 n) E8 ?7 Z .gpio = DA850_USER_LED3,5 Q4 A- j- D! L9 |) D2 k* W6 X
.name = "user_led3",; ^ K/ x( d5 D& d
.default_trigger = "default-on",
# V6 _9 {5 f; Z& m },
/ q3 Z) O5 \) a9 a& P4 U( F# w};
: X" v5 S2 i9 a9 z' W$ s8 V
1 F" U; f5 G/ K8 {7 x, H; Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! H, C- [9 }* @; n9 F1 F .leds = da850_evm_tl_leds,& H" P0 T9 M' c; Y- o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 e1 w" g% C3 j};& {2 C* T* X/ L$ H* G' Q1 Q
9 u* n8 r% L% d' j
static void led_dev_release(struct device *dev)
. K# }7 d9 z$ ~4 I; x1 `# x{' }0 A2 R& W8 F# k) }
};) S5 }. |' E, {. |9 b8 J/ M
4 q/ C3 o% b- z
static struct platform_device da850_evm_tl_leds_device = {$ d, ~. ~2 l0 r3 n! Y" ^
.name = "leds-gpio",! V2 ]" t- l) y# r) ~* z% z
.id = 1,
9 k' K3 h8 Y$ m2 f' T .dev = {. ~. L, w+ m0 d' n O
.platform_data = &da850_evm_tl_leds_pdata,' E4 c' l/ g* m& C
.release = led_dev_release,+ n4 c' N5 V# R! C* L
}
8 u5 a0 N6 L. \" b W};0 U$ W/ o5 e7 G$ r
- I. H0 O! ]) N8 m- Z8 x1 d
static int __init led_platform_init(void)( w2 S! ^! H* K6 U/ b- b/ N
{9 a- a" g- l7 T
int ret;
) b4 g$ |: Z1 U- N. ?#if 0 m! J* g+ }7 w& A( I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% P' X* I9 b: C& A
if (ret)
9 }+ w- ?7 H8 N! D( ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" p' ]) |7 b7 q
"%d\n", ret);4 v& P! r# L/ I+ s" W. G3 S! N5 H4 v
#endif
# X% j: \" Y; M7 x" b, ? ret = platform_device_register(&da850_evm_tl_leds_device);
+ H; y) T8 u$ d0 w) Z if (ret)
/ p* O5 R, z: I. a6 u) Y: V: ~ pr_warning("Could not register som GPIO expander LEDS");, S3 X3 L! c8 c+ y8 R% ~
else
3 J" V4 ~# O- v8 c printk(KERN_INFO "LED register sucessful!\n");
: Y( S7 n3 N1 Z- m" }
+ M0 m$ }( D6 `1 _- t+ Y return ret;
: _6 E# B6 K8 b4 @5 t}
4 }# a4 S) h1 \4 `# y
6 v4 i5 @: [% F( m4 d, ^! Istatic void __exit led_platform_exit(void)
- C, y h1 C! a{$ _1 @: X: G( b2 V; x) v
platform_device_unregister(&da850_evm_tl_leds_device);
, m I4 U& }+ a6 E; M" s5 P: \
" W+ u% C( u5 ~3 \& l0 J- Z% C printk(KERN_INFO "LED unregister!\n");
j6 C, F- H# Q# Y+ c3 j- v}
( [8 V C- z0 f# H+ H* @5 k1 ]: d. x4 h/ ?# [
module_init(led_platform_init);. c/ f; Y+ \9 `: b$ o# K
module_exit(led_platform_exit);+ W9 k" z* Z$ [4 U$ e' Y
8 m& d* y5 q5 `1 C3 HMODULE_DESCRIPTION("Led platform driver");. q8 T9 \9 w* p! {( c7 `( u
MODULE_AUTHOR("Tronlong");" t) A* n6 u6 c; |, l& k: c
MODULE_LICENSE("GPL");
2 ?; \7 V: x( J2 B" S: T8 K! }5 m" s
|
|