|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" J- ^. s% H ?#include <linux/init.h>- q6 s+ h+ r0 e0 Q% q; R2 U+ f
#include <linux/module.h>7 Q5 S9 Y2 y! A0 W* l
#include <linux/kernel.h>
0 Y0 G0 M [9 ? N#include <linux/types.h> D% J& i8 U) e& u% x$ B
#include <linux/gpio.h>5 R" f0 D4 o' f, r9 F* G, ], S
#include <linux/leds.h>/ f8 o# M1 F4 m3 T, `. g
#include <linux/platform_device.h>7 s! m) p+ w) S
) ~- l& L2 w1 E0 m
#include <asm/mach-types.h>
) }. L1 j( o7 j#include <asm/mach/arch.h>8 n5 V b; V: W* ]$ V2 z
#include <mach/da8xx.h>
# u! n+ X; g( Z6 Y! F) j#include <mach/mux.h>/ o; x; ^8 P9 J: g
1 B% t* a2 Y% ]/ V' T) r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" G4 ]5 |$ W3 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) ]: [( [: g% R! X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# l& z) n1 u5 o& l0 d$ m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% P$ W/ C4 ]' K4 k7 M
+ ?- {% c: [! f! t- u
/* assign the tl som board LED-GPIOs*/9 g. X& A$ d: ?, r- b: b
static const short da850_evm_tl_user_led_pins[] = {* U6 H9 W0 ^- h
/* These pins are definition at <mach/mux.h> file */
/ M: n8 Q W& \4 Z1 Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* Y$ d) ~, l5 K7 E( Z q -1% y2 M+ w; _4 }* C! d+ C; u6 g
};; ]* G- P3 A `* u
0 g% O+ N2 ]* E7 x, a% Ystatic struct gpio_led da850_evm_tl_leds[] = {$ u$ v" y$ ]7 w8 C8 x3 F# @
{
7 B& f7 p9 V) j; ]3 d .active_low = 0,; r2 v8 n9 O5 E Q2 G
.gpio = DA850_USER_LED0,
2 O& l$ A0 V* {: n6 b! n5 j .name = "user_led0",) j0 E7 ?2 [& j' g3 ~
.default_trigger = "default-on",
1 V J; _( T* R1 h0 C1 H },+ @: F0 b) H' g% D$ \' l
{
: ~- c7 |; ^) I2 L .active_low = 0,
) X8 X: y4 [: w* N1 O% L0 O .gpio = DA850_USER_LED1,5 V# h6 X! x/ {0 K
.name = "user_led1",3 G6 B" Q4 S& P4 ^2 [/ A
.default_trigger = "default-on",$ t/ e, m4 ^/ w9 d) z6 c
},$ b4 u8 g2 F+ h4 o4 p+ p
{2 A8 X! u; {+ Z, m: g
.active_low = 0,+ _6 u. O |7 ~, [! ?6 X/ y
.gpio = DA850_USER_LED2,
3 t0 e/ C4 W) K' j2 E( n .name = "user_led2",% Q* D" P+ }( o; c3 S
.default_trigger = "default-on",. B& Z* j7 \8 ~* n
},* O" P5 V) y; j: t! m* [' a$ e
{
. R: c; c& |# W: f8 y A) z1 r .active_low = 0,8 K7 c( J6 h1 S
.gpio = DA850_USER_LED3,) C& x2 o' w; H! ?, r
.name = "user_led3",
) T! c) m. g$ e, e .default_trigger = "default-on",0 f' e W0 z' k$ w! `9 C
},
2 n$ \6 h+ n! B8 D' b};& M* |6 J( H/ s% b/ |4 b
. _4 y$ F( z+ q8 ?; ?( ?6 M; z# Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. ^, y1 e) K# h( u* C6 H
.leds = da850_evm_tl_leds,; o7 j, ?% b0 L* F/ ^9 Y* C( F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; w5 `9 ]7 v6 v$ B" E
};2 {2 k( ?1 {2 o5 ~3 O" [8 y
& O( ]7 f( u3 Z5 z
static void led_dev_release(struct device *dev)
; A$ s8 y1 a9 t# ?; V3 o{
! q3 \% a' u6 h$ ]6 P) }* Z) q6 S};
% R; f Z2 \* I& N
8 Z Q# `; k4 i/ T7 ~! }static struct platform_device da850_evm_tl_leds_device = {4 u4 F! g. ^" w# e7 Z8 l
.name = "leds-gpio",# |- i8 h/ h% d$ }7 t7 G
.id = 1,$ s$ P4 s5 ^* A
.dev = {- Z9 Q% `1 s# q: `; u
.platform_data = &da850_evm_tl_leds_pdata,
3 U( y$ O; E. D- R2 B1 ?( p .release = led_dev_release,' T6 k6 R/ ~! M2 Y B9 b/ M
}; l% r3 c( d+ a% H9 c1 ]3 z
};9 p, A8 [, ^8 I5 L& _2 P
, Y3 u1 u& o6 c( zstatic int __init led_platform_init(void)7 ~ y& l- ]4 E- r
{2 H6 R$ b% `: N
int ret;
% i8 Z+ s2 [9 R; F#if 0
( \: M& I- t/ D. ]$ M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); J% I. ~1 s$ J5 ~
if (ret)% t, u k' k4 r; x' ^: i0 n+ o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 q+ G% f- j; N$ f! I "%d\n", ret);
9 s2 @" @; G+ `/ p9 {5 c#endif& I! E7 x: Q+ e: v/ a+ H9 W3 M
ret = platform_device_register(&da850_evm_tl_leds_device);- N+ l2 q6 W. [
if (ret)
2 x) w( g. J$ w4 d0 e pr_warning("Could not register som GPIO expander LEDS");8 c+ g8 ?4 @1 h' G4 u0 O! ^( |! G
else! e# ~ O3 X6 o) o p
printk(KERN_INFO "LED register sucessful!\n");* _' H7 M5 K0 @
+ Y- j' W! @7 U4 k
return ret;
0 A+ u6 |4 m0 ]1 D}3 F+ v. M# I# d' K5 Z; ]
: V" H: J2 M {4 Z& w& C; ^
static void __exit led_platform_exit(void)
- n8 Z) f7 x" y9 n t, L g{4 E6 H$ v$ D4 D/ y$ T' l- }& J
platform_device_unregister(&da850_evm_tl_leds_device);
# Q7 [# R0 z& _9 Y# l( O! r
% }! ^2 {7 v) C' p0 V9 }9 R3 W! e printk(KERN_INFO "LED unregister!\n");
) o1 @4 R6 L0 ^1 J6 S5 ^}
! A) Y p2 l0 e3 O9 E8 E( F% q+ z0 R' F% `
module_init(led_platform_init);
) B( r" Z7 x, e, ^6 ^module_exit(led_platform_exit);
$ V( n( \1 d- y b
. r/ S: v6 F2 H0 L$ `2 N+ bMODULE_DESCRIPTION("Led platform driver");* v% t3 o/ F$ Z" N# m# n4 ~
MODULE_AUTHOR("Tronlong");
; ^; j% F6 i0 [$ S% }6 W# S- LMODULE_LICENSE("GPL");' z( a [- }1 O G# N) y' D# ]' M. e
! v9 m: U+ V+ k4 \( c% l
|
|