|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" O/ t7 H7 K# M3 w1 V3 y0 @#include <linux/init.h>! z, Y- ?7 V1 D
#include <linux/module.h> u, V) D1 \8 ]; k8 O
#include <linux/kernel.h>
3 y! x' L. _% k: ]% I#include <linux/types.h>, L4 L& b* }7 `+ W8 m
#include <linux/gpio.h>4 J5 \3 z$ t" d5 d1 F0 f- v F7 V; F. o6 t
#include <linux/leds.h>5 |( ?8 P! K9 ~$ a
#include <linux/platform_device.h>
" h, b$ n1 |- ]1 X( `4 e0 H( b4 R I, L1 c# s, \4 T: J9 k; g
#include <asm/mach-types.h>
! `. l( R4 l7 p% u#include <asm/mach/arch.h>
1 @3 C+ O( I+ `+ G* h, X$ O1 \#include <mach/da8xx.h>7 m" d0 k. L6 W7 ]$ `
#include <mach/mux.h>' _" ]* u6 {) B* ~
/ A+ Y# g2 O0 I; O. h. a F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; r& T' K' {; c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ C, i) a) H2 t: B. Z4 s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 p) S6 [6 K8 M: L5 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 f; b" S& @! B3 n3 h
1 H. Y0 h" `3 d B2 F9 p) Q
/* assign the tl som board LED-GPIOs*/2 x0 I& ]) a* S9 D' X" U8 f
static const short da850_evm_tl_user_led_pins[] = {6 b' S* |* f( R, n. o3 E* @' x
/* These pins are definition at <mach/mux.h> file */7 q7 | D, P7 W [1 o* R- _! X- }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) r3 W' V, }" H; P9 u; L -1
1 @- O* [7 p; c};% F% g( m" T3 C5 ~0 p0 b4 @! b
5 O# y( d- z3 v' istatic struct gpio_led da850_evm_tl_leds[] = {- I& \) H& O$ c+ m" ^& B: Z
{. r$ o, F7 t6 N6 P) `$ s! G' l5 D
.active_low = 0,
/ J+ h" d* f; M# ^! C .gpio = DA850_USER_LED0,
+ L, H* ?- M# @ S" w .name = "user_led0",% O, H5 k! @7 M- {' l. K
.default_trigger = "default-on",
8 p' M3 u4 m2 U* _5 x6 [: A }," P. {' W" b( u' \6 R; ]" P
{
% Z/ t- [0 Q+ ]( F) s/ p. t! H .active_low = 0,3 T# z6 n/ P5 X5 O) J) m. z5 b
.gpio = DA850_USER_LED1,- m0 O9 g+ P8 V) [( g
.name = "user_led1",3 }# k0 s2 ~0 J" s) a6 Y( i4 H9 i
.default_trigger = "default-on",6 W1 ^1 i; y5 ?7 N6 N
},' ?; E# F2 ~7 u! E+ ^( r
{
W0 J+ D6 G/ {" d/ R4 q" i .active_low = 0,) \; Z/ h& M1 ^) Q
.gpio = DA850_USER_LED2,
F. M$ u+ z: ^; ~- v .name = "user_led2",# X4 c4 H) O2 e2 z1 s: u1 j$ q
.default_trigger = "default-on",
) D- H! `4 a4 f. X! { },
3 C @- q# H3 q/ S {+ p$ v$ q* L2 Q& n% _# h) I. O" I
.active_low = 0," d- k3 G- E# ^) [
.gpio = DA850_USER_LED3, ?, z0 }4 M+ r3 A9 u) {7 E
.name = "user_led3",5 T- z0 V/ h m8 S6 Y+ `+ P
.default_trigger = "default-on",
5 k. ]6 t$ z0 q' K: B) _ }," V% s( E: R B! K4 @
};9 H6 H( r0 [" N2 n
) x+ w/ E- A6 I4 j8 O0 s, f' z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! c M8 ]3 E( {( K, u .leds = da850_evm_tl_leds,
% C7 \( q' `: O6 C" i1 T+ h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: y+ l9 M# I1 l! Z
};# R$ D! y# s$ ]3 P6 c1 V8 w' C
% e; n) R4 Y+ W0 j/ _2 P0 J! M" G6 e
static void led_dev_release(struct device *dev)
0 s: K! v$ I4 {$ _* x, _3 `: `{
% N8 g& Y4 n! A _$ P' Y8 }};4 K7 a8 a# E1 X9 C8 r+ I
0 g5 s( U6 ]4 |+ u% C8 \1 _static struct platform_device da850_evm_tl_leds_device = {' w4 L# S3 N( Y$ V
.name = "leds-gpio",% B& F( B- a4 b% T
.id = 1,
- i9 s2 j0 l, B. d+ Z/ i" b3 @ .dev = {
3 y' k+ ]& M6 {1 C# h .platform_data = &da850_evm_tl_leds_pdata,
/ l8 s/ s: {& O' q0 _ .release = led_dev_release,
' B) K2 u f3 |& ?0 @+ W& E2 _ }
5 S5 O: K7 m/ [( a};
. q' O. o9 c. t8 b
/ `) h, G' r6 wstatic int __init led_platform_init(void)6 M( o. e' }" c& i x3 Z
{
+ i/ [4 t0 ^8 S# @0 M4 Q, F6 a int ret;
2 x& j( E( N8 D1 p$ a# _& D" k: m#if 0
8 f+ `9 [ z& t6 j+ i( r* P# E* v) I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 _5 I4 W2 N' G8 K: P
if (ret)! Q' l, l4 H' _+ d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% U0 D. q1 _. x6 b# I( e- W7 R "%d\n", ret);
5 r$ v2 I# s! I4 k; y#endif
+ `/ T8 @2 i; F- X ret = platform_device_register(&da850_evm_tl_leds_device);+ ~' D$ B& j0 C4 y
if (ret)+ k8 H! B% P, Q: z8 r
pr_warning("Could not register som GPIO expander LEDS");4 D! A& u% H S
else
7 w' g1 r z; B/ G" v printk(KERN_INFO "LED register sucessful!\n");" j0 X9 \2 F9 z; n& f3 c0 F
& F5 H i- ~1 j$ [% B, F. Z- e return ret;
# ?5 b' G; L6 F) t4 C0 e6 J0 e' _}/ }' F- o1 b4 B0 C! f
1 Q( `# Y' u+ x, U1 [5 _, F* o- Bstatic void __exit led_platform_exit(void)
+ F# F: T1 G, E( s8 Y{3 E! M: K" ?* W# E, d
platform_device_unregister(&da850_evm_tl_leds_device);2 b+ S6 L& _: i
; {; w& ~9 n( v, S: G% a$ ` printk(KERN_INFO "LED unregister!\n");+ R) S9 l$ v# [" v0 `7 R
}9 v5 O- V: U7 h- v# x; a2 i
7 s8 p' h9 j4 V7 F1 h( \) `module_init(led_platform_init);
$ i4 S3 R- Y# j0 j: U+ @: l1 pmodule_exit(led_platform_exit);% q( g. w( G( f/ ]
( }5 h1 a' ^) M) c
MODULE_DESCRIPTION("Led platform driver"); O# y( C3 S1 e% s; ^- r( w
MODULE_AUTHOR("Tronlong");
A: ]% e5 K) Q4 oMODULE_LICENSE("GPL");
7 k( M( j" I8 t: z, g! T& w$ j$ f/ J8 S( E0 `4 F$ ~, z5 o+ e% ?( Q
|
|