|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 I2 B* ]: U8 V3 ~) g) k5 F& X7 ]
#include <linux/init.h>
$ b3 F7 {9 H* P+ q9 d- [2 L4 V$ y: [#include <linux/module.h>
+ L1 ?' p; v; ?+ S1 Q5 @#include <linux/kernel.h>
g( v$ w& }+ L3 G6 p, }, y#include <linux/types.h>5 N; w4 N0 i0 d
#include <linux/gpio.h>" c" V- @9 e2 i$ Q8 z6 ?
#include <linux/leds.h>7 O% I! |, k" A/ |2 Z+ p0 o
#include <linux/platform_device.h>
) n. m% ^5 [( P! M2 F' f4 Z# G+ l1 Z& _' \& q
#include <asm/mach-types.h>+ e% f _. i3 V
#include <asm/mach/arch.h> y$ L0 l8 B# B8 M2 L' P2 s: o5 U
#include <mach/da8xx.h>/ V$ |( T# @( G' W E7 k
#include <mach/mux.h>' n& Y8 g5 o5 [: k3 j
" d; f( g8 o4 H# T6 \3 y3 y% s+ W h# s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% T# n/ @1 ~$ x, u) t5 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
t/ J& q% s+ p' u: S5 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. H1 z% o. Q9 ]1 W" i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 Z; y5 M& V5 I! L
" ^) g! [/ m8 c# p* d( v- q/* assign the tl som board LED-GPIOs*/
6 F* |* ~* K( _: n1 g# Bstatic const short da850_evm_tl_user_led_pins[] = {
1 V+ [2 A3 ~0 z" P0 W5 `1 U/ T1 C4 k /* These pins are definition at <mach/mux.h> file */
2 Z1 v+ K q* z) c' C7 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( U/ B D# W! V2 D# T3 F/ y! M2 X
-11 p" j! c R5 t3 k( q: \3 V
};8 A1 L1 X; j$ c
5 M W( N9 y9 N; m
static struct gpio_led da850_evm_tl_leds[] = {
& p" R( J- n3 L% x! e {
1 r, [& S. K) Y" K .active_low = 0,$ o, j8 F" f; ?$ Z. E$ _
.gpio = DA850_USER_LED0,
9 e6 B1 x, e! {0 k& x; T .name = "user_led0",
6 b, V( X/ q8 d# z; P' b; J) ?4 z .default_trigger = "default-on",, F& k& p& Z1 e3 |
},2 I! n0 U8 s3 Z; U; M! v
{
0 Q! |. Z$ X5 w8 T& d6 f. r' C& `! X .active_low = 0,
# r" @6 h4 ] z3 {. e" _ .gpio = DA850_USER_LED1,
8 x7 @7 d2 F# ~1 u& G. Z .name = "user_led1",
2 N: M j ^" ]7 }7 s/ |; } .default_trigger = "default-on",/ B7 h& D( @ t# F9 `3 W1 g
},% ~0 j; h4 Z5 o
{
6 i; j* C3 m6 V- l1 \4 [ .active_low = 0,
( a0 ^8 ?" ^+ p1 ~& B .gpio = DA850_USER_LED2,
/ s% K8 c6 j/ a% J1 ^: \! j .name = "user_led2",
- v6 m4 D6 b' c6 u .default_trigger = "default-on",; P8 j% V- X' F ^6 F
},) B2 h( H5 T' m9 {4 h) t8 T
{
, J! d% }+ x, F N' s/ L .active_low = 0,
0 ^ x' ^1 p8 W; L- W5 B: p .gpio = DA850_USER_LED3,& E# }" R E* z% \, u
.name = "user_led3",
' o/ W. C0 ^: a& [ .default_trigger = "default-on",
9 b, ?/ ?3 t3 H, q" s }, N( W( Q5 R- b" f+ p8 O9 q
};
) P& o0 Y- R8 H% F. A/ M7 ^7 M; u- p& A1 \: D# w& {' Y j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 m, C3 b9 K- b9 N1 a% }2 b
.leds = da850_evm_tl_leds,
( u( S* b" [( t3 J0 m+ _, k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. I% z! e+ |+ |; [' M
};# a g3 J" w1 s. G7 E S7 X3 N( h' m
! N& e" n; M2 b$ I+ q, U
static void led_dev_release(struct device *dev)3 G5 d" n/ n4 O+ d- d! n7 S( `
{
0 s. W& e' b- ^- P( r* ?* m};# v, H7 y2 t/ }- a. `3 ]' p2 h
5 u& F! k2 r) [9 Y- X
static struct platform_device da850_evm_tl_leds_device = {
. }6 h5 c/ R3 G: [: n! Z .name = "leds-gpio",5 g9 U) h. [# k2 r6 R4 x
.id = 1,& U8 z6 Z& t+ a. D
.dev = {2 S6 j1 `1 b$ ]6 { I4 t1 f
.platform_data = &da850_evm_tl_leds_pdata,
% ~: h+ I# O" N, M3 o8 F .release = led_dev_release,8 K6 J. j! e1 m% s
}2 T: s1 [! i" l, R# j) C
};
2 r& V* O4 z+ x" c0 }2 p% ^) p! ^( U$ r+ o4 ~. O
static int __init led_platform_init(void)- T9 `8 v Y. K1 I$ C4 A3 e
{4 p3 D0 b0 [. s- Z1 |0 R
int ret;/ m H& _! y5 w( s) y' _
#if 0( B3 @+ N/ k; u+ ]& E( u& x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ q ?, g4 t; x8 U* |3 y9 o$ c if (ret)
! ]' g2 I- w/ f& A+ t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 D- ^) Q9 e+ {
"%d\n", ret);
: D; q4 o3 S% J. A% v7 \( V#endif% f$ z. ]2 I/ v% l* _8 X2 o
ret = platform_device_register(&da850_evm_tl_leds_device);/ o% V* f7 y* c* S
if (ret)- j% `2 |2 a7 E3 O
pr_warning("Could not register som GPIO expander LEDS");; P6 O( [; L) b `- U% g+ z" H$ m |
else
3 P, J6 |0 T. O& f$ Q0 b( X+ b printk(KERN_INFO "LED register sucessful!\n");. ]/ t# D3 _/ N9 h! h
% a8 N% u( F" [: G1 B! f$ h; U return ret;
; ~, K3 t3 D: m}2 h8 o/ H0 p8 h& d' V( F6 w' O
' n' e5 b8 b- L# v% V
static void __exit led_platform_exit(void)0 M- E: P% E7 q: H, _+ ]) g
{
}* D# D. L- ~1 @ platform_device_unregister(&da850_evm_tl_leds_device);
9 \/ d& ~* \/ j% A
$ |" U$ b; `/ y9 _* s4 S( U printk(KERN_INFO "LED unregister!\n");$ u4 f3 k# J' ~; f( h+ q
}
) l8 i& n1 S3 F! k0 R& q
4 {* k; {# d8 x; ^, O, Rmodule_init(led_platform_init);
1 x0 ]0 T' ]; O8 {# x* D7 Lmodule_exit(led_platform_exit); Q. _7 ]' [0 F! A( [! N
- k2 m. L; y2 m$ Z
MODULE_DESCRIPTION("Led platform driver");: R# ~# E/ @' h3 c" D
MODULE_AUTHOR("Tronlong");, `( T1 X! y' d5 i" j7 a
MODULE_LICENSE("GPL");1 s% X! E. _2 O
) p# E& v" Q4 P5 h; k+ M. |& T8 q" r
|
|