|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 ~, p6 T9 Q) w9 p$ J6 a& |
#include <linux/init.h>) d0 \, D% U% Y& u- \' N
#include <linux/module.h>7 Z8 C5 G* C8 M) m" J; {
#include <linux/kernel.h>
5 u/ M4 b& }" s4 _( p& u#include <linux/types.h># A% \# f* @. j( B1 v* B
#include <linux/gpio.h>' |8 Z1 ]$ I5 ?: W% Q4 F
#include <linux/leds.h>7 A0 }! v. p4 ^5 z
#include <linux/platform_device.h>
f, r- n" k2 |! ?4 C6 \7 ?2 w& \; N7 w! X2 K
#include <asm/mach-types.h>
8 E+ e! d+ a% {) V1 i+ s i' u" q#include <asm/mach/arch.h>9 \) f8 ?. B: H6 q* d: t
#include <mach/da8xx.h>- I& w F# o- b4 a+ I- b
#include <mach/mux.h>
0 A, J) @. i3 _
% ?+ s7 G7 [7 M3 I6 L1 Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); _ t% _+ g+ M" n' l6 L' o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), i+ F/ h8 q; M. y% E% r" C6 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) p8 L0 O$ ^2 E' N8 T9 H( P+ a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" F' Q5 q5 k F _ i5 j( O' z" R% q$ g' N Q( Z* I
/* assign the tl som board LED-GPIOs*/
/ ^% i2 b+ L/ Z& R+ Z4 K3 q lstatic const short da850_evm_tl_user_led_pins[] = {
/ T8 l- N' K# [; F /* These pins are definition at <mach/mux.h> file */
+ Q6 {) D1 [8 e: ~9 l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 c n/ z& |: v* }3 d R6 V' R -1 D) Z1 x$ c8 ~# C) _+ r
};( p) d+ {; H0 J
" a1 @% i7 ^$ z( n. H. V2 e$ w
static struct gpio_led da850_evm_tl_leds[] = {
' N7 Q/ ` A! y. ^) o& _4 | {
4 L0 i" J0 G: Y& L& F .active_low = 0,
, @" V5 k/ O! F! ` .gpio = DA850_USER_LED0,
7 v, A3 w6 S* E+ t& b K .name = "user_led0",; O$ [ D0 m+ t5 h
.default_trigger = "default-on",
! \$ r3 n" o3 l; r2 {+ k },% N8 @. E8 v$ D* z
{9 L+ v& h/ A* F0 C; [0 x
.active_low = 0,8 o* S+ D- I6 r v+ ~; {) Z. }
.gpio = DA850_USER_LED1,% N# X3 @# S% c. z4 }( c
.name = "user_led1",
6 u6 e0 B& R, r. u$ C0 D .default_trigger = "default-on",0 b' l8 D% { R- h4 \. _, P
},# {; }6 b+ i6 R' h! _) E+ m
{
( n7 R" R9 e; y, @3 ] .active_low = 0,
7 v+ Z8 q) z- _' L8 D+ F5 I+ o .gpio = DA850_USER_LED2,7 H$ c8 Q; j* f F6 r8 Q" N
.name = "user_led2",
6 Z$ Y2 b$ R3 k0 A4 O) N .default_trigger = "default-on",
- ~& d! H- h( X% c w; p( Y },+ ^* h2 `, X$ x
{) s: x! M( z' t% m1 ?; N3 o+ Z
.active_low = 0,7 L2 k# h! q7 I1 l2 G' i
.gpio = DA850_USER_LED3,4 u) Z: f- g. }* H6 V
.name = "user_led3",
# r3 H' } G. ]( r0 [% r+ l/ F .default_trigger = "default-on",
. J( e. A r6 r4 n5 x3 p4 r },, R O5 f }8 C) @! [5 q3 A2 A1 q7 z
};3 j! G. h0 Q' S, G1 \
8 t& l1 j9 j; G3 ?4 x ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 v3 ~( P4 i$ b% w: g' H
.leds = da850_evm_tl_leds,
8 [+ r- q6 a% y4 Y3 A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ o" z5 F' o) D
}; W2 m# f- b) O" ?, {! f. n
2 I1 B. \5 e# x9 f! U
static void led_dev_release(struct device *dev)& \9 _8 i* k; d- {: K) K }: f7 d
{- T5 j" y" \, P, F, C. C: Z' P
};
. A* n0 I' K/ f9 g2 C9 N4 G0 }) i+ N q8 O! T5 m! R. y3 ]+ j$ [. W
static struct platform_device da850_evm_tl_leds_device = {
' d% g1 Q3 z6 U2 u0 ] .name = "leds-gpio",
* _- p: a w: ^+ P+ g# F7 D3 y .id = 1,
3 r$ a' v4 G2 v( j5 t .dev = {4 l; T6 U1 p- F
.platform_data = &da850_evm_tl_leds_pdata,
# _/ v: n r1 n& \& Q' L .release = led_dev_release,
! q, n4 B) y: |; w7 S- }& P' i* _ } `% X. C# }# u* S0 j
};1 z* F0 ?- m6 H6 N4 u
% |8 Z. v: Z. Xstatic int __init led_platform_init(void)
; w5 d% n1 y" p: Q# x{7 ^- O8 }* d( t. C1 p% n5 ?( [
int ret;; w3 h6 g1 [% R6 f, Z
#if 0& A$ G+ E0 K: T1 P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' Q; Y4 V$ \( H) T( X& Y if (ret): i% P+ x; @; T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- J4 S+ M$ r/ m2 G, P, a. \( ?
"%d\n", ret);: D% [; p/ z4 a ?
#endif) y( n- n% e$ O
ret = platform_device_register(&da850_evm_tl_leds_device);
4 R8 q6 z* f; E4 C6 y. e if (ret)" r$ @/ g3 }' Q( `7 @$ N
pr_warning("Could not register som GPIO expander LEDS");6 ?9 _ i& a) R j+ f+ U9 h
else
# |1 L& B. J9 s* s5 a printk(KERN_INFO "LED register sucessful!\n");# J4 S k5 S* w+ J% \6 P
/ z5 f4 a- T! D2 ~; ?6 c6 {% s
return ret;) J$ x3 [9 T2 K- \' ?8 D
}
# J! m! I: f) A9 l
& U" j, c2 q0 B t/ E! {: t4 b5 qstatic void __exit led_platform_exit(void)
& S4 S+ m* {8 h# r* a{
% K$ l! t: ?- X2 `+ B" l9 F platform_device_unregister(&da850_evm_tl_leds_device);
1 D4 e' B9 d9 O+ c& L% U! A, i
printk(KERN_INFO "LED unregister!\n");
0 R2 U" A9 r- Q9 X$ e( x% C# }}
, B1 d( t# _: M/ ~) m9 G, Y; H3 l% y0 @) k) H9 j0 K
module_init(led_platform_init); T; k" n0 ]# L! ?' c( F
module_exit(led_platform_exit);
4 F' ^4 g) L5 l( l0 t6 R2 ~& N
, A- a% Q3 f& F9 h' z' Q# H( KMODULE_DESCRIPTION("Led platform driver");$ r$ y* ?8 m" g
MODULE_AUTHOR("Tronlong");
1 O3 T- J4 A& dMODULE_LICENSE("GPL");8 I8 I$ `9 i" V7 k9 `, Z5 \
6 E- T. l3 Q7 N: g' m |
|