|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, k% N' D+ ]( A
#include <linux/init.h>
' T; s6 j4 O/ n6 s' g. y#include <linux/module.h>
" k7 ~+ W1 ^! x) W3 m6 L5 O X" c* i#include <linux/kernel.h>2 l' y3 D. U, I9 p _6 j' G
#include <linux/types.h>0 C/ A6 u( t3 J, E; {
#include <linux/gpio.h>3 Q: L8 _9 x. [; _4 C
#include <linux/leds.h>
* a* H: l- A1 r3 {' s1 X" v I#include <linux/platform_device.h>7 V0 A# o# F# P- |- s! j2 t0 d
# c, l7 K0 C/ k' t& M/ ]/ {#include <asm/mach-types.h>( g ^% z) G3 N' B7 d5 l+ n
#include <asm/mach/arch.h>5 l+ N1 [' Z; ~6 R. _
#include <mach/da8xx.h>
4 J; u+ \/ W" d#include <mach/mux.h>8 u: Q$ O+ m: J! G
0 T, |$ T! q, s6 Y; F* M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& P5 u' e( |2 m& T! `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: T7 [5 G3 i \ @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 {3 {( q4 Q( J% b9 q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ ?5 X3 T, v* T# T" j* L# S+ ~$ g
# T% o# X8 w/ A5 q* i/* assign the tl som board LED-GPIOs*/
: I q' z! M- B3 Y0 J- Mstatic const short da850_evm_tl_user_led_pins[] = {- u5 G0 | v: [& t0 f$ S$ i
/* These pins are definition at <mach/mux.h> file */8 R5 S& B( e: {7 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. ]2 {8 G6 ^, }; v& R -12 c3 r/ I, u" G
};
" U S- C6 S1 n' l0 h5 x
" b& t* ?$ d/ }/ b3 G- b2 Gstatic struct gpio_led da850_evm_tl_leds[] = {$ ?) w" e* i( B; _8 D
{
+ Z0 T% ]5 A+ _! s* e3 r/ s* G9 q .active_low = 0,. `- m0 _) q1 I: D1 r9 u
.gpio = DA850_USER_LED0,, v. ~6 l1 q! ]" ], J! P! |
.name = "user_led0",
/ V/ O: S) }& E! \. f .default_trigger = "default-on",) O* S! A& j& r& k+ `# J& I: A
},
9 j0 w# N& b0 k0 v% ~ {1 W7 l( ]* l! o
.active_low = 0,
. Q' f/ x9 i) x5 Q! D2 c8 V .gpio = DA850_USER_LED1,
3 U y& _1 c* a. N" o; o) q5 g .name = "user_led1",7 ~, u( U, H9 t0 e$ a) u3 V
.default_trigger = "default-on",2 W- U# f6 m7 H2 O. s0 Q2 H+ q; v1 v
},
H- k: y' N* R7 R5 h: A {0 v2 c/ \9 W& `& @" ~7 Y9 H: k8 ]
.active_low = 0,
) `9 F' Z/ ^$ G% ?/ O8 t$ j .gpio = DA850_USER_LED2,+ M! p/ Z/ W9 H
.name = "user_led2",
$ Y5 I0 G) O% q! S' \7 K: W" J .default_trigger = "default-on",, F r: f4 @7 s' N
},# T H r% Q4 Z. N) [
{! M) t/ ~! E! z6 D" D8 x; I
.active_low = 0,. x3 O( p' v, F! V
.gpio = DA850_USER_LED3,
2 h* _2 `1 [, e .name = "user_led3",
! `: Z* F8 Z/ M: M( u$ ^ .default_trigger = "default-on",; U4 e' d; }& Y8 z2 w( X Y
},
0 J* {; g3 r$ u2 n* ]* r};2 Z5 ^$ N1 x' Y2 W' J
$ k& }( r* X* t6 l3 x/ |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 U x* q1 P3 s, f. ^! X5 B8 w .leds = da850_evm_tl_leds,- L+ w; ]# }) s% k+ `# l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 \9 Y" d& e* C4 a5 d) O7 X, L6 v& N
};
3 ]5 ]8 c1 @4 L" J7 E# e! ^% F4 _9 m) X5 X9 B8 b1 x
static void led_dev_release(struct device *dev)1 R. b/ e# a: l- u7 ?
{+ E: @: X1 r4 Y6 Z% }, F$ j
};
# r0 [/ |* N; h3 y, ~5 J! H2 Q3 b' F' R. |+ R4 J! {- ]. L
static struct platform_device da850_evm_tl_leds_device = {( a. y& e& s& b7 p w* V4 r
.name = "leds-gpio",! }8 t1 N* X G( }) F8 ~
.id = 1,
4 P0 l0 k& d; _" f4 U* t .dev = {: h/ q5 s* Z/ ^* ]
.platform_data = &da850_evm_tl_leds_pdata,! d: W1 J$ @8 A
.release = led_dev_release,0 u: W H2 x+ L: P
}
# }1 P+ o( U& I4 a3 w( V};1 V+ x( v8 n# i9 S" {7 z9 ~& }
Y: K7 u. m6 k# X) U
static int __init led_platform_init(void)' y- Q/ f6 I0 [; s% m7 w
{
* Z' v3 G4 t7 p9 j4 N( t int ret;
]& ~4 Z# F, ^#if 0& H/ y1 ?& N/ Z* a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ J9 V- `( p; R$ D/ s
if (ret)$ T% y! F ] M3 k; m+ V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 O* z2 }; M( H2 g
"%d\n", ret);7 V" T8 k" h9 m9 H3 \8 m+ ^
#endif
. m! H$ A, F# W' P& l ret = platform_device_register(&da850_evm_tl_leds_device);$ p( q+ `( U* G$ [ L* m( j) N
if (ret)* I' R- R1 i1 L l$ F: Q
pr_warning("Could not register som GPIO expander LEDS");
! O4 `' b# L% w" N" k6 y9 W else0 ~1 D* @8 U) j5 h
printk(KERN_INFO "LED register sucessful!\n");+ T& H4 X$ d/ K7 Q8 u
& k$ j4 N" X4 X$ b2 }
return ret;
4 u: Z. m2 S- K, v}+ \" V$ `5 G5 e# W* h" z
+ J7 {8 x2 l# j4 h! K
static void __exit led_platform_exit(void)
; ?. }; _$ q1 F+ Q; r{
- o5 Q+ P! S. y* C/ L0 @$ [" Q platform_device_unregister(&da850_evm_tl_leds_device);4 Z8 G$ r& P* y; v5 R
% \! o0 U$ ~) P1 @/ e
printk(KERN_INFO "LED unregister!\n");
. g% A+ c; m# `, m}
( ~7 F3 w/ p: l' Q7 L x
" L) u( K3 k) E( }5 K/ |, wmodule_init(led_platform_init);
4 `4 z- h& n8 Jmodule_exit(led_platform_exit);) K: y/ M1 B8 j
; Q A# b3 w3 Q, D7 n5 [( |! K; {MODULE_DESCRIPTION("Led platform driver");7 x _4 K( d, l" [4 V7 ~% W- ?
MODULE_AUTHOR("Tronlong");
8 ]6 g0 E) b) VMODULE_LICENSE("GPL");1 F: \. q- [% A
1 m7 k6 O& [/ Z0 J
|
|