|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ S& E/ o6 g& c) K: J# B- D
#include <linux/init.h>- [+ ~# m$ L: `
#include <linux/module.h>8 `7 R& m4 F o" i1 A7 [$ T8 `% W
#include <linux/kernel.h>
1 _. o( v1 g% z# i#include <linux/types.h>7 M+ ^, _7 r+ T6 L3 @& N8 n: \
#include <linux/gpio.h>
0 e6 W) m" m. d3 ]#include <linux/leds.h>
* q* l. `) w8 Y. S% a& _#include <linux/platform_device.h>5 m! F) g6 g/ e6 Z) ]# a* b
! y. i4 T" h5 k+ E! l! J#include <asm/mach-types.h>
" M, {! S2 ^9 ^1 m" _' K#include <asm/mach/arch.h>
; I( O- k% `8 b#include <mach/da8xx.h>
& f2 Y: O( ~5 o2 B# S#include <mach/mux.h>
, h" b8 F. ^) B K9 ?( m' M+ y. }& v+ o+ N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 s$ R9 o3 o; a9 W/ ]3 U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 I. B$ @& T* u; v2 u+ S/ D% b6 c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 \7 X5 a4 r9 L8 S' r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' [5 o5 d5 Q$ z4 Q
1 |6 r0 F6 _) m6 i) X3 _- _/* assign the tl som board LED-GPIOs*/
. e/ }2 d& |- d' h5 }, istatic const short da850_evm_tl_user_led_pins[] = {
. Q8 o- z9 x5 a4 t/ g7 N* I, p /* These pins are definition at <mach/mux.h> file */
& o* y- v& Z( {* k; J0 C& J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 m6 L6 b, `) P: p: v -1
8 m4 s7 ^. x: M. q- l7 x}; \ t% B4 ^& p; y1 W1 L+ | ~ s
- M+ H' Q7 ]9 a
static struct gpio_led da850_evm_tl_leds[] = {& t- T L y" [4 w# X7 F! W! r
{
# A. a: D6 s2 z5 `: a" R0 B .active_low = 0,
/ Y' @2 M) C$ k M7 m7 K: d .gpio = DA850_USER_LED0,: `. t5 E5 p, }8 O" j- q
.name = "user_led0",/ b2 G n/ q7 T# _0 y9 i! H
.default_trigger = "default-on",) a% s" K& i$ T" U. k2 @
},
8 a0 i7 N) Z% d- o! |$ x {! \* @. v/ D+ ]" Z- _3 P
.active_low = 0,
+ {/ O3 q4 ^1 e7 L4 i .gpio = DA850_USER_LED1,
# W- e6 W$ @( b3 j& I7 d9 o% S .name = "user_led1",
& U. b- A" _, Q% \& q) y( [ .default_trigger = "default-on",
0 l, {. K5 ?" {5 A; Y },, h! w2 J0 Q5 I2 l
{
* Z4 o2 U! I0 q, ]6 J1 h .active_low = 0,
, @8 d, r. U5 J: a .gpio = DA850_USER_LED2,
& v/ y( {2 s0 I& g; l .name = "user_led2",
0 O) b C# I. F. g .default_trigger = "default-on",
$ z i9 a0 H! g/ V },
8 Q5 ]7 z8 L) d- m/ ~1 @2 N' {+ a {2 a+ \2 h& o# V3 l6 H
.active_low = 0,
5 @( c0 I' a+ C5 v .gpio = DA850_USER_LED3,& q: ~3 \; Y, e7 ~; [- U+ b
.name = "user_led3",; k# o0 t) b$ o, H0 F/ h7 ~
.default_trigger = "default-on",
3 ]2 v% g7 y4 I( c/ R },' m& k5 Y. p! p: e4 \
};
# }- Q9 ^$ c+ L5 m- {5 x
' K- k% }2 p6 d/ z: T) R6 ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ X% H4 u0 g# M$ l2 \" i& p .leds = da850_evm_tl_leds,
- }- i& z+ n5 \7 k' | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) T1 [/ l' A$ o/ y8 R3 D
};6 a$ j- [2 C# A' W
1 Y6 F. A. M, E! ^6 l5 L6 Z; y5 }static void led_dev_release(struct device *dev)
( u# M- w0 U/ F! s{, {& l# a$ {7 g, U; _9 Q/ I9 a
};# z8 ~3 g! T" c
+ ^* q6 B6 H0 z6 ]static struct platform_device da850_evm_tl_leds_device = {
# `1 I. U. \- U .name = "leds-gpio",
3 `( I1 g2 i7 e7 _ .id = 1,
! r" t$ A4 [8 g3 Y! }9 ] .dev = {
" B) M. y8 }! t: G' y .platform_data = &da850_evm_tl_leds_pdata,
4 T4 Q- Z8 W0 M .release = led_dev_release,' p7 m5 o1 n3 B6 J- t
}
9 H+ B7 k# |! @};
0 ]1 q3 U ~! o3 \0 o4 ]8 K8 M) K% c) ~" J+ \& O" S
static int __init led_platform_init(void)- @; [9 Q; q5 W# Y. K
{% Y5 N* d% ?$ N
int ret;4 D! W0 g/ e+ z4 y7 l
#if 0
" X* h" _4 f# W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) b0 s' n4 s8 y
if (ret)
1 _: k; q5 x$ C: r6 |0 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* E. k# w1 I$ i% ~* t$ T "%d\n", ret);% M/ ]3 K9 N8 n0 b
#endif* W. {$ ^0 T# E# g7 ~
ret = platform_device_register(&da850_evm_tl_leds_device);+ O7 h+ d; e9 A8 L! x- u5 u
if (ret)
1 x) i5 d/ Q& Y: P$ @# _, k' W- o pr_warning("Could not register som GPIO expander LEDS");; `& z0 }8 J& W: w2 |
else0 \ A* k' E' ^' Y
printk(KERN_INFO "LED register sucessful!\n");
1 m/ x# W- K1 h7 A# y; l
% `" H/ }* y/ [- R, ~" A: I return ret;$ F6 f* T. A/ Q s$ K) o6 Y
}
; s8 f: o# e" }* |( z, |
3 p) r) Q: w0 Q$ C) Hstatic void __exit led_platform_exit(void)
& G3 Q; G" |9 a: @* s H* x" f: b5 P{: O: @) Z/ {* M0 D
platform_device_unregister(&da850_evm_tl_leds_device);
7 `7 H- A9 g5 b8 h7 ~5 |/ Q
4 [8 M2 p" M" p4 Y& L# ~ printk(KERN_INFO "LED unregister!\n");5 k% f l5 O- K) c3 A
}
- m7 {: }: a' N( G" s( m) O; _# X- ~* g- Y" |
module_init(led_platform_init);2 Y/ F) W m4 ` |, y8 _
module_exit(led_platform_exit);
2 h& ?& G; V* M2 k) Q- ?7 b
! G* I8 a, e; s. VMODULE_DESCRIPTION("Led platform driver");9 u* H, P; {+ j8 I
MODULE_AUTHOR("Tronlong");
1 y' r/ ~! q+ N& R$ _MODULE_LICENSE("GPL");
' Q# B5 Z9 i/ B* J3 J* J, M7 i" C+ u7 h5 n
|
|