|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ ^/ X/ P9 H# ~#include <linux/init.h>
/ p4 r/ O) ^. R ~- @#include <linux/module.h>- X7 `* U7 |7 u" J" W! v9 {, |
#include <linux/kernel.h>
2 Z' i3 I! Y2 p+ o% Q#include <linux/types.h># \9 G1 T; ~3 Z/ s
#include <linux/gpio.h>2 l# ?/ n0 [: s
#include <linux/leds.h>' x( P+ w3 F: u' |
#include <linux/platform_device.h>
( U, T% K5 t" b# m6 r8 o9 n, L" b$ f* `, L! n \/ @9 e, r1 P4 C1 i4 V5 P
#include <asm/mach-types.h>: e7 B, z0 h$ K0 {' T' V
#include <asm/mach/arch.h>
. B" `' O7 {5 u, Y1 D9 F# f#include <mach/da8xx.h>
4 r9 J; E7 v/ X- _! e#include <mach/mux.h>2 S! g3 d1 O0 H- N
2 }2 I {- G1 _7 f2 I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 |: h5 M# ?% L6 r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ I3 p$ O+ p3 ~; N0 r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* C' c6 d& r6 ^4 e+ |: B( }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
u9 p {% I! C$ r2 h$ q0 j2 q9 J6 H$ ~
/* assign the tl som board LED-GPIOs*/( H6 U! s9 s/ C
static const short da850_evm_tl_user_led_pins[] = {# s! K6 o; X* n( ^; C
/* These pins are definition at <mach/mux.h> file */
4 M8 ~! @ s! U& L; K) c9 y; Y# P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) g2 x3 S' k3 U+ d
-1
$ h# B3 k. D2 |};
& e& ^- z G% }% n3 G
; ]# ~# o# Z6 estatic struct gpio_led da850_evm_tl_leds[] = {/ I( U L7 u( D% {' U
{
, U* w* T8 C! M5 l# ]0 B3 V .active_low = 0,
& \3 ^2 {' q8 i1 _: o1 |8 @ .gpio = DA850_USER_LED0,9 P" A+ O" T+ w6 @+ M
.name = "user_led0",: Q8 R7 ?9 Q% ? h7 d+ T
.default_trigger = "default-on",. k2 Q# `& B5 s% w! h
},% ?7 S) i+ ?0 s& P
{
* }3 h$ v: |8 ` H0 e; P# O o, z .active_low = 0,4 H5 Y" ?# K* \7 E% E" Z" E9 q3 V/ r
.gpio = DA850_USER_LED1,
2 `* n! Q! H5 W .name = "user_led1",
6 R V# }0 h! V. e( X g: Y4 ^ .default_trigger = "default-on",
0 c+ x8 q8 i/ E% m8 l* O, G },
6 n: e. X' [- m# K/ j, d; F {
i% J% T" j% q. \ .active_low = 0,. l1 G/ i. A: a4 t m( |
.gpio = DA850_USER_LED2,! v0 A( e$ j0 v+ O0 E. R u
.name = "user_led2",
% q5 W9 n; s' L( p2 r .default_trigger = "default-on",
6 O7 V; @1 J0 t },
5 Y% t2 I4 C N0 d- P7 n% E {1 E4 a7 z9 ^* O
.active_low = 0,
5 n7 W; x3 Q; L" l& G! U3 h% M% k .gpio = DA850_USER_LED3,
; d, _! D4 {6 S9 e .name = "user_led3",
8 J- M$ _4 K+ t3 y2 ?$ ~ .default_trigger = "default-on",
# z' `: }; E- M6 E& `3 f3 U# | },; `/ s9 r R5 g- D
};. {. K# v8 K' i+ l
7 G! [3 Y0 N2 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# R" M! S$ K: t4 l m4 d- ]3 w .leds = da850_evm_tl_leds,; v( }5 g& s5 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 d7 y2 F1 {* n: `& c( _
};* M3 J5 z2 e, `/ e; O( A9 }
3 l7 F1 A) r/ U% z( A0 ^
static void led_dev_release(struct device *dev)- ^5 K' y$ r/ _. K$ ~# `
{
' O8 t. K$ k0 a0 q: s};; C0 _6 X2 Q6 x4 }4 @' R( }! N
3 t" `3 J; L. rstatic struct platform_device da850_evm_tl_leds_device = {
3 z! O. p5 A7 Q: u .name = "leds-gpio",
' G. H; W; Z6 U. ` .id = 1,
+ z: |$ l$ v- K A* { .dev = {
6 T. l4 n$ u5 f$ G5 L. d .platform_data = &da850_evm_tl_leds_pdata,; Z y* P* b7 D( X/ e3 K8 S
.release = led_dev_release,/ C/ H/ R" X, v0 s& n; v- |8 |7 l
}; j! n/ l! E9 T0 e V
};
% T% D2 v( x( l% K' _. ?$ Y+ K5 h1 W- w6 E
static int __init led_platform_init(void)
) `8 B- s1 y6 j2 T0 t{
9 O6 R' a4 d% w% | int ret;
& q# L6 j+ p" L#if 0
& p7 n' q: f7 J( U/ H! l( R9 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& s: {( N) ?$ \! D
if (ret)8 m; N' s: k9 k; x* e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 c7 k2 u9 T+ C I$ T1 b
"%d\n", ret);
! y& L" y& M& g. T2 D7 P2 J5 l6 k#endif4 g1 i' M/ R2 {8 R6 \
ret = platform_device_register(&da850_evm_tl_leds_device);
5 D6 j5 z' i( Q% y6 ]1 D' j4 x if (ret)
! @2 m- x2 f8 x H$ \% E5 O pr_warning("Could not register som GPIO expander LEDS");; |6 b* z) [! m4 n- {- I6 ^, b, L
else
- m, N5 D' O4 w" F; h printk(KERN_INFO "LED register sucessful!\n");1 h1 Y9 `9 f8 Z% d5 w% _
, ^0 o8 G( m; C# E, d2 |- r# ]- h+ E return ret;& X+ d; J1 l% a' A3 k
}
9 p/ Y3 R7 @2 t3 f- C3 r
, T* R1 a. r2 b' `7 l- Ostatic void __exit led_platform_exit(void)! ]0 A( g& \# O$ w$ |8 e
{9 j M) {. |4 }! @8 V/ e' E- g0 F
platform_device_unregister(&da850_evm_tl_leds_device);
' p: Y F) a3 N( _9 ]6 A" R* M- c* z+ q, M
printk(KERN_INFO "LED unregister!\n");
( r* e2 Z2 n7 l o0 s0 }4 [/ l}
5 G) r' C& q2 J& f: ~# f; ~; A
( \# s& ~7 c4 q. G' w# w8 imodule_init(led_platform_init);# {! g# S2 f# \) o7 ^; d
module_exit(led_platform_exit);4 z$ I6 x) M* l2 M( O
, N/ D9 C( f: b; X/ E, I/ HMODULE_DESCRIPTION("Led platform driver");! y( v2 _' S# G: L
MODULE_AUTHOR("Tronlong");
- `9 f, R) C, T ]0 \/ H3 PMODULE_LICENSE("GPL");) K1 H7 L& b% y8 }
" t3 F+ }5 p( F( W2 _
|
|