|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# V, B1 g! f+ F6 c& o$ Q! w5 h
#include <linux/init.h>5 }5 m; r2 `8 |+ O. i6 }7 d
#include <linux/module.h>( y& t8 j6 m) |5 q6 M
#include <linux/kernel.h>
- T& [/ o: q7 H: O }#include <linux/types.h>
0 V' w- t& e1 Z" h4 \4 @1 p$ Q# Z#include <linux/gpio.h>
8 G0 o& a2 D6 d9 u' ?" s/ B$ E9 r#include <linux/leds.h>1 ?3 J$ t7 j0 t( w" T+ a! w
#include <linux/platform_device.h>* K3 ~& J6 r: a( l5 S( k# A h
- ^, S+ c; d8 b* ^/ I& y" f#include <asm/mach-types.h>
9 {# i2 ^8 ?* ]+ K0 D1 g( x#include <asm/mach/arch.h>5 [+ n* ?. v% k: V( H) L
#include <mach/da8xx.h>
% T' k. w+ w7 t#include <mach/mux.h>
/ E x8 Q" p2 n% M/ r8 G
* j# k7 C9 Y! S. H. F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* D9 L$ C6 x( e5 Y6 z8 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% f( s! `) |1 I+ S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); N3 o+ |! C4 o/ I: n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! e4 ]5 L" w3 y
/ C! w2 e$ n, N7 Y: \/ n. C0 e- J% o/* assign the tl som board LED-GPIOs*/
6 J* h$ k7 P1 @& _' s6 O! r) ^% xstatic const short da850_evm_tl_user_led_pins[] = {
) y! b. A5 X+ Y: w7 b% s+ p /* These pins are definition at <mach/mux.h> file */) T- F; T8 s6 q2 y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* X- ?6 @) L. p
-1
- J# o9 x+ D/ ^) |, J1 o$ B& V};$ g# q. S: H# c- ?+ e* \; u- Z
0 f6 `) @" [4 R/ W1 Y8 Jstatic struct gpio_led da850_evm_tl_leds[] = {
( C* w5 n) V- m2 q( V {
+ v6 Y2 l* o) f" H .active_low = 0,1 M+ I3 L8 p; r: L8 f/ C2 d
.gpio = DA850_USER_LED0,9 T7 u q( ~8 X# i E
.name = "user_led0",
4 l+ _ D$ Y3 i- s$ W' p' F. d .default_trigger = "default-on",
; ]% C3 M9 Y: f) n4 y( x$ \0 E },; Y i0 {! u0 c( B' y
{1 C6 @& b2 x' ~5 u
.active_low = 0,$ X% J( `1 a) [* j, s& L2 N% B: V
.gpio = DA850_USER_LED1,
6 Z7 A1 n3 i% X; j% F .name = "user_led1",8 q3 }' h6 X! e
.default_trigger = "default-on",
! M8 X( P4 B& A5 `7 n },
0 }5 q1 p: P$ ^# o {+ ^( e ~: A. C; f& | I
.active_low = 0,7 M7 w% o& I n$ Z- V
.gpio = DA850_USER_LED2,
& ^6 `* j* b+ T- i* L( n3 u .name = "user_led2",5 f2 b1 T0 R( k& A# e O3 _
.default_trigger = "default-on",. W+ W5 P4 x7 V0 B* u- g' j
},8 a* Z' p: q. j$ L* f8 x( z
{
! U5 W+ h0 S& C .active_low = 0,
% \) x5 k4 p8 V6 U .gpio = DA850_USER_LED3,* L. O" v3 F4 N
.name = "user_led3",7 h# ?* }" O( y' {$ [% W
.default_trigger = "default-on",
3 E- S$ E+ g: a7 Q/ W },& [9 s4 \9 t, u
};$ K, c$ q5 x& S3 y
: K' r( G* Y# ?& Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' v6 W& z0 t& m6 V6 @ .leds = da850_evm_tl_leds,
" }) N/ U; z: {: b% W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) g% _; {- s9 ^9 k; Q$ Y' D};
3 O! d, c' K- F9 B% N; A9 [8 W
' P+ a# r! u6 Nstatic void led_dev_release(struct device *dev)
! C$ F' n7 z6 P{2 q0 p4 [+ h. r, k6 v8 @8 v
};/ A' t7 L% W& R& v/ }
/ ?, Z% a" r4 I$ v# Ystatic struct platform_device da850_evm_tl_leds_device = {
# N) z" c5 u7 H5 ~. n. \0 Z .name = "leds-gpio",
v( @$ o# U- G# g/ F .id = 1,
3 E1 W/ ~% B9 l) @3 X( N/ F .dev = {7 G) ^2 C0 _' p# Z# L7 n
.platform_data = &da850_evm_tl_leds_pdata,7 a8 l0 ]2 q& @1 P6 c# z
.release = led_dev_release,
/ }% C9 X; Y3 h; B! D0 o }
# {) b2 {% }% g2 v5 g};
5 q$ D# z# h6 }) K8 X. a U2 i3 F* x% {6 `5 c
static int __init led_platform_init(void)7 S% A# e% `% E1 Q2 O
{
( A5 }* f( ` v! {' Z0 L+ q int ret;
" h9 y# M4 i; E% B( T% Y#if 0 E: F; C& E# `' H6 q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( P) K ?' m* \8 y# b! R& S+ |
if (ret)0 F. z ^& H% @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ x* Y7 m. s$ U "%d\n", ret);6 `+ }/ l& N5 K/ G
#endif! R+ a! E/ c# J' P* l
ret = platform_device_register(&da850_evm_tl_leds_device);3 {6 [- H' F6 y ?
if (ret)
4 ]) l* L( X+ I5 P$ Z3 V pr_warning("Could not register som GPIO expander LEDS");# O8 A+ a" A; V! Q
else% o @$ f9 W0 B- t) n- F7 e
printk(KERN_INFO "LED register sucessful!\n");
- \3 A: G' I3 R; a# p& Z; q
L; d" j3 H- u$ }9 g return ret;- p/ j8 M# m$ u% w
}
j1 p" F: E$ u% ] y0 }2 C" N9 B z
9 J3 {, |+ L4 b3 Lstatic void __exit led_platform_exit(void)
7 X- x' h8 v/ G9 w6 [. r9 L{5 L4 V5 H" k6 r; q. a7 N
platform_device_unregister(&da850_evm_tl_leds_device);' D& Q$ G, J B# V
! U. L: i8 W4 F7 s; s printk(KERN_INFO "LED unregister!\n");
% N7 G" V+ N3 W C" g& q}
% a, Y: ]+ B* h+ A( V: V: ]) {0 U
4 L* c) C1 d6 Omodule_init(led_platform_init);
+ X. \$ ]9 Q' Y0 P, Imodule_exit(led_platform_exit);) l! _# f' o& ^3 S7 y9 ~. a
: e7 k8 v6 o: }MODULE_DESCRIPTION("Led platform driver");
, s4 R: c' R; s3 P/ [! oMODULE_AUTHOR("Tronlong");
6 N3 o0 ~' F& q: kMODULE_LICENSE("GPL");
( b7 `# c+ }3 X/ E0 i8 c# z& S: O1 E1 Q5 F3 I" `
|
|