|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& j0 f& O! A8 E, }$ T2 B4 V( _
#include <linux/init.h>* G6 r4 t1 r; z8 q
#include <linux/module.h>
; f5 @: y- T1 J$ v0 P) E4 [#include <linux/kernel.h>" E) U) j( P& q
#include <linux/types.h>$ b# z4 Z% Q* _: Y
#include <linux/gpio.h>
3 Z' M" D6 `$ g# s1 \4 M#include <linux/leds.h>+ K& a( v/ f3 P
#include <linux/platform_device.h>
3 \& E) s) Z; }$ Y" ]: _) q
: D0 j! H2 x% j7 O# A; c#include <asm/mach-types.h>
- \ }% ~$ y1 Q R#include <asm/mach/arch.h>
8 q8 F3 c' c+ P1 W#include <mach/da8xx.h>0 k' i* {: N" k, @# G- v
#include <mach/mux.h>9 \2 H7 R! Y, V
0 x. G7 J9 E; d; b2 z. l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 b- c: @3 S) ?) V* `* i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) o1 T, T `7 p" x; R. v+ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 y# G/ T0 R4 l9 U$ h# s5 t2 L# `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* D3 J* L ^, F
/ ~" {) Y5 F& x' F5 N* t1 {$ x
/* assign the tl som board LED-GPIOs*/
9 K- y4 N6 R6 J+ L4 }! Qstatic const short da850_evm_tl_user_led_pins[] = {
+ n) S7 n. z" _% j4 ]0 J! T /* These pins are definition at <mach/mux.h> file */
' w s' j( F. f+ t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 V' D8 d; m+ Q1 u4 b
-1
: Y) n5 d! a5 b( E! z& R2 U};! Q, f3 R. y9 _5 S
2 K) y J9 ~# ^! h6 a8 E
static struct gpio_led da850_evm_tl_leds[] = {
0 S; b8 F# f9 P. p: Z" L ~ {! L0 u& i) N5 D3 b
.active_low = 0,1 }1 ]+ ]9 z4 t
.gpio = DA850_USER_LED0,
! g6 [) E/ Y! \3 z# W" @8 Y8 U .name = "user_led0",3 K) n/ w1 q7 {
.default_trigger = "default-on",
+ j) ]% b' ]( |1 s! X/ b. A5 a: q: J },
f" M4 a2 j1 X0 a {
" {# ?- W, o! b0 X- d( v .active_low = 0,5 a1 g; z9 ?$ J# h, s' Q
.gpio = DA850_USER_LED1,
$ [& q9 t) ~$ R' e4 T, }4 X- ]/ Z9 { .name = "user_led1",
' B( \+ j! M0 G4 m .default_trigger = "default-on",. Q: Y' { |" b+ [ C Q
},4 E: q* ~8 z5 G6 |. w1 Z' C0 c) T
{
6 `& h/ E! L6 o ^& E( N .active_low = 0,8 U$ [1 f+ e/ D' ?0 r/ p
.gpio = DA850_USER_LED2, Q; h7 M0 k3 @
.name = "user_led2",3 M2 f- V J2 H% `+ e0 S! S
.default_trigger = "default-on",1 V- R& O$ e* W# W
},
. {0 W( }6 y2 x( o% h% N# K {
1 {' ]- [1 O, t% T& I2 | .active_low = 0,3 L2 u3 z4 u) D+ J( B( M( ?
.gpio = DA850_USER_LED3,8 M9 ]/ ^% S7 ~8 }8 J* C
.name = "user_led3",# T2 x @3 V6 T( D; { D4 @! z& W. u
.default_trigger = "default-on",
; y7 T' |4 k6 Q- B4 t1 K },
) e; U' Z! R. t/ F ^- P" O) n2 x};
/ H5 W! Z3 _2 \& b# b4 k D
$ \7 [9 V' l6 N; z3 e6 Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' A- {- k4 \) y .leds = da850_evm_tl_leds,: f( U: `) \0 o7 L4 }2 ~ F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 k3 Q/ F) k5 ~0 _/ @
};5 c3 Y7 A, b0 J, w, ?$ m5 r
5 V: C) W( y8 K2 N' k
static void led_dev_release(struct device *dev)+ `2 y! J" H5 c. L
{1 r! W- M) O! I6 C) P$ }! k8 J* \
};
# ]8 {* g5 J8 x" \& N' i1 q
# z4 b! H2 m: z3 M8 Istatic struct platform_device da850_evm_tl_leds_device = { b% H$ r1 m6 A
.name = "leds-gpio",
8 W8 ~$ D! I4 Y+ w; G .id = 1,0 f; f- b. N# k1 d3 C
.dev = {! r/ {9 M% m, ~* { R. D
.platform_data = &da850_evm_tl_leds_pdata," C0 _: j8 O% y9 j8 j
.release = led_dev_release,
7 {9 ~7 b' V( S8 Y' l }9 i+ G9 t# p! W
};
$ D8 S0 B& m, x) D3 W* v
+ f% O$ V& T' K* R( w; X% G) m# c* Hstatic int __init led_platform_init(void)
- N- E$ l8 e" s6 P4 W$ O{
. I4 n) T* D6 w6 l int ret;, o/ C2 r' m; [- N4 s1 l
#if 0' f7 w/ f$ K# ~9 ?( h& p4 i/ n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! ^ l6 H7 f( A1 i% e
if (ret)* \( {2 C- N* d3 G. Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" L. d: l5 o) E4 ?& B/ A7 _
"%d\n", ret);
9 ~, U( N" B' r1 ?& `#endif- L1 a0 }# F( R" [; {
ret = platform_device_register(&da850_evm_tl_leds_device);% q k# ^. r8 K& F; \; \- D
if (ret)
, w- a! z, z6 Y @, s pr_warning("Could not register som GPIO expander LEDS");" v' a" C/ T1 t0 P. y, q
else/ }7 T7 K/ e" b5 w. L
printk(KERN_INFO "LED register sucessful!\n");2 G: o( v: Y" |
# e! ]+ S S7 C" W: q return ret;1 ?9 B5 M( D, z$ r
}3 y& I; L, ]/ f
$ ?' W4 U1 ~/ H- b# n! tstatic void __exit led_platform_exit(void)
# j5 L' Z4 |2 {" u+ ]{. ^' O$ j, Z, L i" b; }
platform_device_unregister(&da850_evm_tl_leds_device);
2 S7 {/ _' o+ T9 Z3 I3 d8 T1 P/ a$ e9 s0 R
printk(KERN_INFO "LED unregister!\n");
7 o: W% N0 K6 u& n# O% D}
2 F% m1 Y9 K0 I$ s0 q9 b9 G7 @/ U' ]8 R) c: \5 x/ V: y
module_init(led_platform_init);
; J T5 U0 A5 omodule_exit(led_platform_exit);
1 c& Z+ n# o, ?2 H9 o; `9 i, }
2 z* r7 V; M; ^) R' k |1 W3 ^" Z nMODULE_DESCRIPTION("Led platform driver");# E: B8 o/ X9 v' d# w" W$ Q
MODULE_AUTHOR("Tronlong");, G. N6 Q1 A2 D1 `- _7 D1 `
MODULE_LICENSE("GPL");
* t; A& i) s; I3 N) L7 t' F+ A. v, U! F! e
|
|