|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 x* K7 \& i% I0 o1 f: z9 O/ H
#include <linux/init.h>% _9 H* X) \% g# z
#include <linux/module.h>' c, [& e# v/ E/ L
#include <linux/kernel.h>
+ m# _' \& ^4 J |3 ?5 Y#include <linux/types.h>
: t& R# \0 D6 t#include <linux/gpio.h>
; s9 G1 `1 u* U b5 n#include <linux/leds.h>
, {+ `5 l# n) ]$ ]+ z" I#include <linux/platform_device.h>8 U6 q$ I9 E# P# a' J/ x5 ~9 K6 b; ]. ]3 k
& l+ b" |. e1 C, {/ I
#include <asm/mach-types.h>
' a, k9 Z0 a: n2 L: ^& `2 r* U#include <asm/mach/arch.h>) z5 r. \! a, T- j1 u5 f+ x* X
#include <mach/da8xx.h>
" f6 I2 f( f b# D, q' q$ _#include <mach/mux.h>
+ }: r V+ |" W } p7 e' m* a
# L$ z0 Z# i* P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 H6 c% k" o4 R2 T( a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 t2 P1 o4 u% P; i7 n& g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 O; f( X( u7 x3 t J0 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 d# f# J3 f% G$ X$ q' Z' O
0 {* H$ f. u" t1 j1 N" O4 C* l9 T0 O# P
/* assign the tl som board LED-GPIOs*/! L$ I: O% E2 ^; X5 F
static const short da850_evm_tl_user_led_pins[] = {) \4 k( ^+ f/ w: j2 K) }5 c5 T
/* These pins are definition at <mach/mux.h> file */
, \# Y/ [( n* t* R2 T M3 i7 J# G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 n0 y( z |; f* H2 g' M -15 @- l4 o$ @8 e' X* B2 _# l e( P
};$ C6 j9 Y; B$ E |. N+ q3 o
: |; g; I1 H- z. M4 k: [: T
static struct gpio_led da850_evm_tl_leds[] = {' J$ ], R. Q! i6 A, f
{% p! T6 L# }8 T3 T X& s
.active_low = 0,
I! I4 f1 G# z) m; g! m" v' [' U .gpio = DA850_USER_LED0,, j' \7 [/ u0 Q* e
.name = "user_led0",
6 N3 W7 [8 Z) C1 _1 m .default_trigger = "default-on",; L5 |' P& E2 }2 m
},
2 v5 _( |8 K! _$ f( D, q; x {. Z- I9 `2 V. F. l# e# c
.active_low = 0,: T9 D& W' p. ~* D5 I
.gpio = DA850_USER_LED1,( T' ~" Q# q) I1 c5 S
.name = "user_led1",- e! {8 \$ g i l
.default_trigger = "default-on",
( y5 ^% p* m' u4 `+ b( R6 z },4 s. L& G# p9 h$ I+ G: j8 _
{
8 X3 C% h; F: R0 U0 p' g4 r( g- [4 L .active_low = 0,
& S1 T9 t8 T( a( l& e6 b- b4 C .gpio = DA850_USER_LED2,, s% M( q, m8 p% |3 n4 ?
.name = "user_led2",+ U3 u- e6 c" C3 ~/ A
.default_trigger = "default-on",
; O+ o7 @1 a" Z. m- |9 g },
. x2 Q# f7 i& B5 V: F {
( T8 y8 n- o. a, o/ q: Z9 E: | .active_low = 0,
# U0 L/ w! ?0 ^0 G) g5 t; ~; H: f .gpio = DA850_USER_LED3,
% `: P/ a* J5 A( G% P; l1 E .name = "user_led3",
8 w( t/ \3 Y1 S1 Y5 Y .default_trigger = "default-on",
1 E5 C6 d; | L# v },2 d7 }% y. e- z/ A0 t, w
};
1 C* E# s3 |) [$ \ z, O) [' j% H% S3 z3 I2 Z* U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { v' }+ H! T5 H" Q0 I9 T E
.leds = da850_evm_tl_leds,% i* h3 M5 H2 I1 X2 o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 }) u4 J/ P( W% a2 I$ v* u};1 I. p+ U+ x3 m9 L2 H! U" f3 x
9 K* S% M4 t& V5 U+ @* X) }
static void led_dev_release(struct device *dev)8 e3 X% t- d5 c+ M* a; p- L
{
1 t) b5 M2 a8 Y' b+ Z};
: `( W. Z: ]2 E: P, ]4 m3 O) f- U
static struct platform_device da850_evm_tl_leds_device = {
; r: z+ o8 i1 d0 [: U# x .name = "leds-gpio",7 O" n/ v* S& B8 u" b* f* X' ]
.id = 1,
# A0 p7 J- B7 _2 P) B .dev = {
* W. W6 B0 z- V; U" V .platform_data = &da850_evm_tl_leds_pdata,
' Q; V/ y/ b6 l! Q+ H% e8 } .release = led_dev_release,# |- `9 y& r# C9 i2 V5 H Z/ f
}
: A) c$ N2 {# @3 A, C};
' g% V+ v7 t$ S
L# g5 d/ z5 p# u# Estatic int __init led_platform_init(void)8 \$ `5 P7 P* r' M
{) O! X$ x$ s. p+ [
int ret;
; a0 r; ?4 {4 e8 Q2 W1 z. R9 a#if 0& ?! \$ Y% |* ~. R4 B$ k& ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ `2 m4 M6 w7 q) k) b! ?4 ?
if (ret)6 l' w f& W' m. P4 F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* r1 H9 w- J4 ~3 l
"%d\n", ret);3 u( X, f2 R0 U/ O5 l
#endif
& V* w* u4 `: A% F( @! E8 k ret = platform_device_register(&da850_evm_tl_leds_device);
$ y5 Q& Y0 n" P: O. A2 u0 v, ] if (ret)
. n2 h& o# m3 V( {$ Y pr_warning("Could not register som GPIO expander LEDS");2 M' L' `2 P j
else5 V' E# F+ \4 S
printk(KERN_INFO "LED register sucessful!\n");
/ C0 F, m' _& {( I/ r0 s( z5 O L) i, C: F* y1 n: z# A- w
return ret;
( p% }" ~; c! |$ {; e% z. Q8 i}8 x+ j! ^. K+ o% f- u* T. M
$ V, K7 e4 b- ]0 \' J% Astatic void __exit led_platform_exit(void)
" W2 M" k. t' Z' y/ F# i& K8 `{
- p! m; _; @/ X$ Y2 X6 y platform_device_unregister(&da850_evm_tl_leds_device);- @; ]+ y2 B! a
" E1 B$ }- u8 |# O% r( c4 u" i
printk(KERN_INFO "LED unregister!\n");& V8 E' L5 f4 [) }- F
}0 G+ e) O/ m! }8 k/ ^" b
9 ~; U K) c7 I' Q" [module_init(led_platform_init);
6 ^) w" D t: f( i! n3 u6 imodule_exit(led_platform_exit);9 l; L# j/ y u4 g. \) _& b6 O
9 |/ s7 F+ A, W! j
MODULE_DESCRIPTION("Led platform driver");" s& [8 |$ |* I" H9 ?
MODULE_AUTHOR("Tronlong");1 Z f$ N9 U- H. k6 g& X R& M0 t
MODULE_LICENSE("GPL");
- o* Q$ p3 f7 s3 S) n# y9 `" s- h" }' e5 Q' N2 U {
|
|