|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 Y4 x4 S& P- D {$ D; X1 e, ~) I. N#include <linux/init.h>
% G- W' M3 n8 C. i5 u#include <linux/module.h>7 ~6 R8 b3 T; Y
#include <linux/kernel.h>
4 |3 }& t2 G* h: Q, a+ u* Y#include <linux/types.h>
- r( o# H% k# Y) G. b#include <linux/gpio.h>
# N5 L" S o8 o; E#include <linux/leds.h>: L6 S y+ e6 I* ]5 V+ r
#include <linux/platform_device.h>: m/ ?: s9 c8 L; w
$ \% T; F, ^6 c' E) n7 W#include <asm/mach-types.h>
* s4 ?0 c- A% A9 w; } l#include <asm/mach/arch.h>3 V: {- T: ^5 s; v- `; ?
#include <mach/da8xx.h>3 \6 Y* S& s4 T; M( S; B$ S) c
#include <mach/mux.h>
9 a0 V9 ?: X1 r. { @& Y
, e/ K8 M: [( L) B W( o$ i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 l2 d O( c) C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& l7 p0 ^& c1 g# }2 P- x" ~ \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& c7 Q; g& W4 ~& b# q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) i* J. n$ e: Y' F* B
. V a7 l3 y0 r' i5 d/* assign the tl som board LED-GPIOs*/* `' F& t" X: t, U% [2 Z. l; W
static const short da850_evm_tl_user_led_pins[] = {
" ^6 a' s8 T1 b$ c! l B. d /* These pins are definition at <mach/mux.h> file */( l1 k1 y/ C8 d. F8 I" t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 ^, I% o4 |( u' B9 V7 j D9 {
-1
- V) q' F! R7 ?6 g. G' j8 ?2 t};
3 K, N( g2 @. {' L
9 i, V! `* e3 S: y+ `9 M6 Sstatic struct gpio_led da850_evm_tl_leds[] = {
( j, D ~5 o# W0 P* N' H. p {: o$ C3 `/ J5 h5 c: A% p
.active_low = 0,
$ p" ]/ y' n/ w" A8 x .gpio = DA850_USER_LED0," Z% R3 E; p% G1 b# _* @
.name = "user_led0"," H1 W5 a3 S, y& c
.default_trigger = "default-on",
+ R2 Y7 A" h6 L* `/ p [. B },
2 F9 E' U; Q* B u2 H {
0 ?0 u+ [* a- n* v' q. O .active_low = 0,3 R% v' p& E* i* K7 L& {% K+ ~
.gpio = DA850_USER_LED1,: P) \) a$ h' u& H$ v$ i( X; j
.name = "user_led1",
0 \5 i* U& e- I .default_trigger = "default-on",# G% z4 J% H6 H) r0 g
},
* Q4 A1 O, {; t( o, g7 y {
9 w& _! c' e1 l .active_low = 0,$ [8 Z0 X! S0 }) H$ K9 ~ K
.gpio = DA850_USER_LED2,. T9 Y; V6 S: F. c3 M& S
.name = "user_led2",4 b; g% l: r( M$ b
.default_trigger = "default-on",( u$ w: r# t* u' x* b# X) G& X: |6 i
},
) t, I; M" [: ? {
2 [* v# r! T1 p$ c( b4 z .active_low = 0,0 D* ?5 X3 ?# x+ K" |6 o3 n" y+ D. }
.gpio = DA850_USER_LED3, i T5 ]6 |' p9 B# [* g
.name = "user_led3",0 v' S ~6 _4 t1 w+ h A
.default_trigger = "default-on",: _5 R- j, @+ i: l! p
},; |+ m& Y' D) Q6 F# t' N2 z, |9 L
};
6 T D' p9 P) q2 N$ C& C9 Z' M- I2 q* A0 t* H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 M. m1 { y9 c .leds = da850_evm_tl_leds,. l2 `7 y8 v7 g# |) B$ M' o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 L, {3 r0 O+ X
};) D; {- S/ j! [% a7 |, I3 |# e
- f3 b, m5 k |; g6 x8 I
static void led_dev_release(struct device *dev)
7 }) Y( }/ ~& r8 a, c{( C- t5 W9 i& T7 x7 Y ]5 g
};; x9 Q1 d" Q' g! f0 r4 Z* r
5 v# J- P* P1 u
static struct platform_device da850_evm_tl_leds_device = {
0 q6 f5 `2 C/ Z4 h. k5 j .name = "leds-gpio",/ w: s. E/ B8 U9 u; z$ k/ K$ \
.id = 1,4 {' B1 r2 T- O' P
.dev = {
- t9 P* R3 V% l9 x .platform_data = &da850_evm_tl_leds_pdata,( [, x, F* @8 q# }1 p$ f8 K6 t6 m
.release = led_dev_release,3 B) X8 S9 b5 |6 ~: [9 N7 e
}
; ]1 u' m, p* h};3 q9 C9 P$ c, k2 w4 W
" K7 h5 B. n$ z( h6 a# H/ l
static int __init led_platform_init(void)* ^, H9 C! p% g( `
{
7 P4 e+ h; {0 Y7 l% u5 B int ret;
) [' l; T! c6 @1 U3 B+ @! r#if 0
+ |" e4 q2 N: E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' f# ?, d# b, @! V
if (ret)
, B. ^( m5 S6 ]+ p# Q0 A+ i# } pr_warning("da850_evm_tl_leds_init : User LED mux failed :", @* g8 M% _3 n6 e; ~: e' M* n* y0 Z
"%d\n", ret);3 [9 k5 a7 V$ Z3 P
#endif" v" W# y. O0 D* a/ j' y7 P
ret = platform_device_register(&da850_evm_tl_leds_device);
, C: b* O6 F W! \2 D) K if (ret)( d; V; G: D% I% k3 O' G2 ?
pr_warning("Could not register som GPIO expander LEDS");
! j! y M8 T& R, z8 t$ d4 i' _ else
/ s V# f* j) y, ]% t printk(KERN_INFO "LED register sucessful!\n");+ ~9 y o! Z; P4 V; G+ [5 x
" A" E/ k. P6 Y" x
return ret;
9 j5 B" W9 z1 ^/ g6 I% N4 Y7 R}6 N/ H' e2 f* f
& O/ w9 z0 u" M& B0 [' i
static void __exit led_platform_exit(void). j0 W M7 x2 R6 ?
{1 K0 l8 ?4 `) z {( m& Z% g9 \6 a
platform_device_unregister(&da850_evm_tl_leds_device);
( w4 f5 i# c& c6 U/ H
0 C0 t: u4 C3 k6 s4 F3 e printk(KERN_INFO "LED unregister!\n");2 }$ w. _- U/ F1 L; r
}
% `4 N9 G/ U! Y# ?# K, v
( s$ R( b& [4 V% Cmodule_init(led_platform_init);4 r) i; Z6 ^; p; m* J* j7 |
module_exit(led_platform_exit);
2 |1 v! L6 u/ x
7 q4 q, b! K$ e" VMODULE_DESCRIPTION("Led platform driver");
/ @7 e' b% n8 NMODULE_AUTHOR("Tronlong");+ [: y4 a( h6 \9 n! f+ O' p
MODULE_LICENSE("GPL");( e2 j( _. h+ c, m% x4 D
+ L9 Y. n$ b& ^. V |
|