|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' ?, P# t% r o#include <linux/init.h>! R# L/ M1 j" ]3 R: }
#include <linux/module.h>8 a% M# E" P ]& _( P7 G
#include <linux/kernel.h>6 n& ^9 L6 v3 E0 H6 `$ \
#include <linux/types.h>7 T) }9 a/ ]& j
#include <linux/gpio.h>
4 T! X8 c) D3 ]: u#include <linux/leds.h>2 h' Q% i* w( K& L! t h* d6 ^
#include <linux/platform_device.h>
7 E- q! f2 p& B! {' Q& @) G
1 Q0 R" A8 B+ y) Q/ j#include <asm/mach-types.h>
' x& c, C' b: M; W% j% A#include <asm/mach/arch.h>
; K2 I t$ Z- H5 D! q#include <mach/da8xx.h>
0 }# h; o/ r# i% ?, U9 E5 o#include <mach/mux.h>; j2 |& m8 c! S0 {( n
0 J3 f- d9 e) x' h9 w# S% s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) C0 x; b9 L6 I4 Z( v# g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 c4 x0 V: p# F; r7 K+ }% L$ g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 b' u0 O6 U, w2 ]+ C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- y6 w- o$ F+ F E) ~& l
2 [9 V$ ]; `* U- g/* assign the tl som board LED-GPIOs*/; e( R; [! }# p Z6 @* {4 o& [ g
static const short da850_evm_tl_user_led_pins[] = {2 L, E; Y4 M$ ^
/* These pins are definition at <mach/mux.h> file */
{( W. n' R' K, K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# X7 U! O% H- x" e+ g* Q -1" S* ]3 P6 E( }5 P
};' o3 m( y( X. }7 h! n9 \4 L# \' f
" K- x4 b6 K; m& s0 X8 n
static struct gpio_led da850_evm_tl_leds[] = {( t! \! L/ _1 s& Y0 ^
{
, A2 K0 J9 W" A! c5 L- G' q. K .active_low = 0,
( G8 U* Q8 l( S7 ? .gpio = DA850_USER_LED0, x U# W4 r+ Y/ Z% r
.name = "user_led0",
( m* _0 \1 V) }! {: v" m1 w! P$ k- h .default_trigger = "default-on",
& ~0 V! @ C7 p8 c },; U# \: d2 i( l
{& [6 y$ | @2 A I# ^9 c8 @# m
.active_low = 0,
7 E4 U6 K# K; s8 b .gpio = DA850_USER_LED1,
6 Y8 P9 v% F+ ^2 |" ^5 F& l2 h) J .name = "user_led1",3 m! i- s y1 P9 p
.default_trigger = "default-on",
- ?8 B9 E/ A# _2 n },
7 H0 f: ^/ W4 Q$ a {7 S* Y/ I/ f/ n* O' d% W, `
.active_low = 0,
8 @" w5 k( i! U+ ] q2 K8 Z/ } .gpio = DA850_USER_LED2,
0 q/ ?2 g. D8 y$ F .name = "user_led2",
# W7 T+ d8 C) b .default_trigger = "default-on",1 Y/ ^ d" c T5 ^- ]3 T6 L
},
) g/ @! b. F _" X {. s: r3 s4 ]( z5 E
.active_low = 0,
+ N5 E8 T8 G. K8 F .gpio = DA850_USER_LED3,
3 h/ x2 M% p# T .name = "user_led3",
" Y' L; ?" p6 Z .default_trigger = "default-on",% y' |0 o" K+ m% t5 A$ L
},
/ r" W/ O {2 i4 o: o7 c+ Y};
H! K. e7 a) Y& k6 K/ M, N. p: g+ i F, W# b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" x7 R3 |$ B( V4 G( e
.leds = da850_evm_tl_leds,/ t3 }+ }+ y, ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), k# L3 y) o! o: F
};
; j9 i' J# l' u2 W# e$ E7 Z$ a9 |# V" m
static void led_dev_release(struct device *dev)
+ x- Y! I0 u9 k& A{
, [% V! `% }+ r/ ^ L, b/ N};* H$ C' ~' F) @4 H) w: G- @
7 U% C! F1 n9 e* ~# l) F; y4 {' _
static struct platform_device da850_evm_tl_leds_device = {
( D& e( C( B& q( u% v1 N .name = "leds-gpio",. Q- \( f0 h' G$ R! _4 D
.id = 1,1 [ E# A3 d. x* A/ C7 v0 [
.dev = {
' v {! F; F& m, \7 I& v+ W .platform_data = &da850_evm_tl_leds_pdata,3 ^. e# o& {7 S8 ?
.release = led_dev_release,
0 n) C! t' w0 U/ \. t1 ]9 N; m }8 w, b- j2 G" v8 n' p; C
};
: \- _3 G: D ~! k; q1 [5 s* A* l1 q* n5 r: {
static int __init led_platform_init(void)
5 k5 j7 U& X# o7 O! E. Q. w{# Q' M+ F- A2 K0 b6 l- y
int ret;+ G+ _3 z2 p5 s' y% H) o
#if 0
7 B) c8 j# [+ V) J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% F/ V4 `, w# R3 p* Z$ E* ]
if (ret)( r( [7 U4 r: W% t6 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% \% H Z" |; V3 u! ]& f "%d\n", ret);
: v. g+ K) Z2 t: }#endif
% ~7 o7 j! Y3 `; T1 s5 g# w9 c ret = platform_device_register(&da850_evm_tl_leds_device);; f- y0 P( K3 }5 B$ S
if (ret)( F" N, V* U# V8 u
pr_warning("Could not register som GPIO expander LEDS");1 T, C; R6 }( o* j) c; z: a
else
( }1 q# h) N* X: I+ P8 }9 R. q printk(KERN_INFO "LED register sucessful!\n");
$ h6 M' n9 C& F/ u. ?( V3 t. L! w! K+ D! u" w9 |% c( R
return ret;9 B. b# z6 J9 `1 D( {8 \
}
1 G/ B, ?0 p* o; v) @+ p5 j2 ?$ _+ s" v# H2 O k; _8 u
static void __exit led_platform_exit(void)2 r' q# l) f8 d4 O( d
{: D- A7 a1 I1 A0 {
platform_device_unregister(&da850_evm_tl_leds_device);" e6 s7 F! r, Y8 |4 p
" ^1 z9 E* [; |$ T0 K printk(KERN_INFO "LED unregister!\n");
7 S4 B, K! [) P$ O/ o}% q- i6 o) l$ Q) Y) }7 @
1 X# R7 h: l8 B) G: Z$ N8 j) j J5 e- t' m
module_init(led_platform_init);0 B8 a! |' [; }0 S @% f
module_exit(led_platform_exit);
1 k4 Y# J6 g* |2 V8 ?
b/ `2 K8 Y2 [. {- R' x9 n$ BMODULE_DESCRIPTION("Led platform driver");
; o9 W6 P6 f' x0 eMODULE_AUTHOR("Tronlong");( }, i9 q0 n {/ N3 t# g8 I
MODULE_LICENSE("GPL");
- H1 u7 b# Y, S, `' H* S; B7 z3 b& G8 n2 x: v
|
|