|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 ?8 |; F& Y. G2 X9 A# \- R
#include <linux/init.h>
, Q/ ~: ^1 w& a( ]7 J& [( I7 F#include <linux/module.h>; W$ }* }7 C5 k+ X l) x$ Z6 l- a
#include <linux/kernel.h>
7 V, H2 V3 }/ G, y#include <linux/types.h>
( s* q: G2 i/ t( u# c#include <linux/gpio.h>* J: u5 Y- a8 ?& F1 }5 V8 o
#include <linux/leds.h>
6 R: |3 w% v \& J6 h2 D#include <linux/platform_device.h>
2 f/ j$ }; J0 ^2 Z4 K+ f
3 M4 I' Y' g8 n3 N#include <asm/mach-types.h>) Z4 [6 {$ ?; U
#include <asm/mach/arch.h>4 d2 I; g" h U# p
#include <mach/da8xx.h>3 k' ^* ]* t7 }6 h+ v/ p$ q
#include <mach/mux.h>
% A+ N( m3 ^0 N) H1 }
: {) |' n; Y2 x" [1 |6 P0 b$ O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& `; ]8 t! W, u& }+ r9 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' O. O' X8 j4 t' i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 R/ u- ]& G) r" m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 l. B, H/ ^$ y
+ W' H7 b3 h8 w7 x8 C$ V/* assign the tl som board LED-GPIOs*/
3 v) ]7 v. V% d! P0 a9 ~) C1 _static const short da850_evm_tl_user_led_pins[] = {
3 w; E( c% H$ x+ w* K4 v /* These pins are definition at <mach/mux.h> file */6 g; S5 q7 t/ a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 y+ t0 X! d4 J( E
-1
" u# [5 } e4 a" l; ]};5 D, f, H# i+ W7 `
, r- R- [* O7 ^+ K4 {- R- K
static struct gpio_led da850_evm_tl_leds[] = {
" B |* A! `% e/ V; Y { F F0 F' F' r& n
.active_low = 0,2 ~8 o! i+ z8 Z3 d; P
.gpio = DA850_USER_LED0,9 M9 a* F; R: I9 o
.name = "user_led0",, F3 T6 a$ f+ o8 s
.default_trigger = "default-on",
5 [ c. }# n! X$ w },
+ J: a# j: B3 r7 Y3 z! b {
# z. W) d6 L" ?7 ^5 ^& h' ?4 q .active_low = 0,# l. u" K- R0 |0 [% _: w0 D! k
.gpio = DA850_USER_LED1,
6 x3 [# J% z( J# L9 M! A$ F .name = "user_led1",
* i8 }9 k/ a3 y .default_trigger = "default-on",
! ?1 s2 p0 Q2 \3 c: g% f },* b# S1 R U' W8 ]7 |; x# c2 ~
{
( M, a- O* B2 q+ H0 k5 E .active_low = 0,( j8 \ }) F1 `( o( E8 D
.gpio = DA850_USER_LED2,
. M0 d9 Y$ M. V' y6 X8 C/ D6 Q/ B .name = "user_led2",
0 T- ^6 E: U) e( A8 ~$ Z2 a .default_trigger = "default-on",( e- M3 E' a3 A
},
3 d; h7 h7 q, c$ E& Q2 y {" G2 Q/ m" f. ~+ h$ b
.active_low = 0," \0 h$ G! ^1 _; Y7 r/ x
.gpio = DA850_USER_LED3,% j# a! v* e- W& e6 o! I* Z. s
.name = "user_led3",
- u3 a* A4 z/ d& R' U' S) y .default_trigger = "default-on",
, D8 ~) r; H' F8 Q6 l( d' f+ g },/ H6 a, R& Y' _0 v9 p6 v ?3 w& Q
};
# Q/ Z9 W3 n2 H) y
, L3 s, L7 D5 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: G9 |, T9 {* B
.leds = da850_evm_tl_leds,
6 E+ B/ J! Z" b: K9 ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 Y L2 h3 ?% o! G( L: I
};
" ]# k) }7 f4 n$ u" q7 P* r+ l6 S4 N8 Q ]4 T2 }; i
static void led_dev_release(struct device *dev)
" {( s2 U) _; D: }" {! B5 k- ~: Q{
* i5 Z- N# ?* x7 V% L: h6 z m};
( }: n4 @. Y B8 \6 {6 a+ b" E; q" B1 j, D4 k1 O2 F
static struct platform_device da850_evm_tl_leds_device = {% A$ U& d! E5 b4 _2 b' W; `6 t
.name = "leds-gpio",
$ _# k4 f p5 m1 y2 F" M .id = 1,
! t1 J4 \) h @9 q$ u .dev = {
; J; N& k4 t3 Q0 ?1 L7 t# { .platform_data = &da850_evm_tl_leds_pdata,* B5 A8 y4 Y) Q( p' l
.release = led_dev_release,
* b) T: J1 {, u& F1 O# S& K! J }; `9 }" `. V' z3 u' \% _
}; `& l& @) L: }
! I3 u* g/ I/ A7 Z% Xstatic int __init led_platform_init(void)
7 I9 J1 D& W" t{
: y: ~' H/ a$ o, o, {" p, d o0 a! X int ret;8 j7 q; C) J% x# m( g9 d
#if 0
2 B. U+ r6 [1 e$ Z; n# O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& a% \' e- i. f) r4 V/ I if (ret): `) R0 T" F' w$ s+ r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 J8 g8 P, K0 ]/ Q- B "%d\n", ret);! O: I% e; t1 y6 d9 P
#endif5 H$ ~+ h( U8 C- E0 F
ret = platform_device_register(&da850_evm_tl_leds_device);
. Z! Q1 \ g- G: Z7 j* b6 ^" @; T O if (ret)
! ]1 l1 B5 @9 Z pr_warning("Could not register som GPIO expander LEDS");: d( P* N) ^7 f; t ~
else% p7 b( D3 i) p' e
printk(KERN_INFO "LED register sucessful!\n");
! N8 Y) l6 y% |4 v3 x
% C" d& L# n4 N; W+ ] return ret;
, Y( q* H% K9 U' k7 D}
+ @" Z% x1 `: V- H
( }2 Y6 x' C5 }1 M! a2 q- hstatic void __exit led_platform_exit(void)
" C6 T8 d/ F6 a. q# S/ v* h& _( G{
4 @7 P+ S" p0 N# ^) |% p platform_device_unregister(&da850_evm_tl_leds_device);0 J; c' f5 ^7 x2 A# f
% W0 _" `! p) M P' X( Y printk(KERN_INFO "LED unregister!\n");+ ~' ?. x" m* v% x# v0 q
}
$ f9 o9 Z0 e) F& [4 ~% |( H# {! D1 R8 q# ^) `5 y- h
module_init(led_platform_init);0 x; N5 Y1 T D, y& U+ }. k1 a
module_exit(led_platform_exit);' Q' o: E6 d. S/ o
* W& k8 A6 X! H1 vMODULE_DESCRIPTION("Led platform driver");# l6 ^% \+ o3 e
MODULE_AUTHOR("Tronlong");
3 L% i' l% c& c5 K7 I( uMODULE_LICENSE("GPL");
9 `4 Q" W) V {' S3 j" A; l
* y; Q8 R% k% p' G4 w |
|