|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 l9 \* ]# \) s/ U6 X! x) K#include <linux/init.h>
# z1 x4 b+ c, h+ v2 Q% z$ L: a( @1 ^#include <linux/module.h>
& l: z% ?2 {+ d d t8 K#include <linux/kernel.h>
& @8 M/ m( F; p- F#include <linux/types.h>
9 F8 m: [! ~, n* R4 g' i% j( h#include <linux/gpio.h>
! L$ f0 B' Q3 v: m#include <linux/leds.h>7 {; ]9 S/ c5 E, F( f$ w1 O. k1 C
#include <linux/platform_device.h>
- t5 T4 S, q6 g9 H* r$ C+ ^1 z
# j. j4 T. G2 x2 Y#include <asm/mach-types.h>7 l! w( J( k' I) L
#include <asm/mach/arch.h>" v3 y, W$ z; C2 K! f
#include <mach/da8xx.h>8 x8 R3 Z/ q% {0 ]' |' m
#include <mach/mux.h>
4 N- I" Q0 A( C
( U1 p* p- v( V N: W! y" v! X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ k. |$ ^$ W L. k/ [4 f9 F$ u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 U' j6 L0 c* w5 H( i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 I x2 C0 y$ j" f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 F! `0 G8 f4 e
& @5 r4 m! @3 G9 j0 l/* assign the tl som board LED-GPIOs*/
# W7 R) H* O: Z5 F/ Pstatic const short da850_evm_tl_user_led_pins[] = {8 y3 [& s, X8 G# M
/* These pins are definition at <mach/mux.h> file */* s7 ^- K' l( }5 Z: d% H( k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' S5 A) Y( B# Z' p8 D! |8 ^ -1
& n; U% Y& P7 }$ D0 l! s: u- U};8 k# \0 r0 q) p' [
! d) ?$ z% a1 @8 Q2 P0 I( n
static struct gpio_led da850_evm_tl_leds[] = {4 k% N5 ^( V! X; E3 J4 G% R
{+ H/ C! Q' k7 c2 d. p7 {
.active_low = 0,
& I- x k$ H! i) K8 h' c, m; R .gpio = DA850_USER_LED0,
- m6 h2 {' M2 x; d+ ^5 X4 f .name = "user_led0",
2 [$ x; t6 R& b6 \' l5 z5 ~7 m" Q( l .default_trigger = "default-on",2 N/ e! a7 ]0 r) h. |% }- s1 {
}," h# O- n7 |) _6 y
{* X( N+ F/ k9 |$ F6 ~! _3 I
.active_low = 0,
3 N& `) C. Y$ }* Z9 z. z1 s .gpio = DA850_USER_LED1,
6 M. i2 V( ]6 M7 F$ X8 x* G, b .name = "user_led1",
! c6 T3 I- l$ z; ], k .default_trigger = "default-on",
4 b, c& O+ x/ \: F9 R/ v1 b },
, R8 ]& T# s7 a7 e6 X* }% i {# a: c+ U( I2 T8 N: F
.active_low = 0,
" F: [( o. d7 E. B0 P4 ]" X .gpio = DA850_USER_LED2,* N5 Y7 ^+ N9 v( [3 A. U
.name = "user_led2",9 F. w" @, p1 w8 F
.default_trigger = "default-on",
5 g, F. K @4 w9 p, z },/ \# C& e" v- S( V/ |9 C% v
{; a9 T+ m8 R# @% v3 R! v
.active_low = 0,
6 M+ Y" ^7 O; b+ z .gpio = DA850_USER_LED3,
# O9 E: O- n, z2 k .name = "user_led3",: n4 T5 B( O& R
.default_trigger = "default-on",
* R" W' j( o- M% v& k# [/ c },0 F% y( ]: {9 n- K" }6 D+ L
};
1 k- ]% ^$ T% g w1 v5 W; {: z) x& `# i* d0 t* ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { o9 H( V4 R2 z$ ~
.leds = da850_evm_tl_leds,6 p3 }6 K/ c' |2 P' [3 T1 i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. H8 I b4 e# L* [
};
$ j9 v, ]- O/ @# X7 g4 Y l7 F& D0 x9 W2 [1 |+ X2 i3 v9 e" h5 E
static void led_dev_release(struct device *dev)
; q6 _, B" u0 b0 n" M{
1 X0 ^ C' C4 _3 I};
+ @3 x3 Z7 Z4 Y/ ?7 x: F
" m! C! e+ ~) t* rstatic struct platform_device da850_evm_tl_leds_device = {* f) {; U% c# f+ x# h* S. B3 j
.name = "leds-gpio",
+ ~& U+ a- \# W3 j- @! \ .id = 1,
5 T+ I" O8 U& I: N' f .dev = {
) y9 b: E: p# Q% r1 n9 ?2 A .platform_data = &da850_evm_tl_leds_pdata,6 }, D6 {! j) b$ |, s* K# O! Q h
.release = led_dev_release,
3 w5 y) p! A. ^" Q }& d8 C( N, r+ D) y! s
};
# m* T7 `6 L' Q0 l% K" ~ e- k/ d, v/ s0 l
static int __init led_platform_init(void)
2 r& [( G" O) \* b{8 `, D+ Q0 {- n- }9 S8 J
int ret; Y8 i. x: f1 ]' C+ B8 u2 f) V
#if 0
5 G T2 m5 }1 U* |) o. X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# p5 e3 s1 N+ q' K# \5 R$ Y* e if (ret)
# y" o ]9 Y/ C) D& t+ f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# \! f z y* g2 Z: `: y9 i* T "%d\n", ret);" L* D/ M* @2 S' _2 B
#endif0 C( R: K" K ^' `- p5 k( v' ?% w$ ?
ret = platform_device_register(&da850_evm_tl_leds_device);% \" }# r, J, i# R0 }
if (ret)( j+ R- U R6 W) u _
pr_warning("Could not register som GPIO expander LEDS");7 e% Z% R, O% D0 L
else
5 \0 W1 A' v! i% ]9 w2 t printk(KERN_INFO "LED register sucessful!\n");
6 q& `1 Z$ N4 k. v& ~9 `; n- g9 T2 [' F/ o4 A
return ret;
" ^3 \" h% y. |. r# c}
0 i4 Y$ e* W. E
8 ^; L# U8 A, [5 Ustatic void __exit led_platform_exit(void)
0 R, Z# n1 l4 G* S/ S5 n{
! R4 h& o3 ^, m" y% a/ _ platform_device_unregister(&da850_evm_tl_leds_device);" y" V) B- ~3 y$ i. r5 u. Y; @
' l! ?8 I8 `6 p% x7 ]6 g6 n) `. e
printk(KERN_INFO "LED unregister!\n");
, N) K) T6 A4 B4 B& ^/ t( J}
- M- ^# v) H" C' p/ J$ d9 M; i7 Z+ X1 w6 t! h0 v
module_init(led_platform_init);
+ F2 c1 t3 I* c( _, k5 M2 D& }module_exit(led_platform_exit);
8 m8 r, f2 u" s {* I4 B* V4 N% Q8 D$ T0 d
MODULE_DESCRIPTION("Led platform driver");
: Y8 \" }% O/ f* g8 h2 T% {MODULE_AUTHOR("Tronlong");$ o7 J6 ^. u% p0 G% N
MODULE_LICENSE("GPL");
5 L. p0 s+ e4 t7 H, t% y5 G% N) q! M4 A: v% R
|
|