|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 K& `% X! A: P0 ]1 ~) R
#include <linux/init.h>
( l5 A+ o* H- q3 t3 q9 U#include <linux/module.h>; \2 a2 `% E6 o/ v/ B5 k' s. m& L
#include <linux/kernel.h>
! g5 q3 a7 Q0 ^! k; q" x g#include <linux/types.h>/ i' M* }) [+ ?0 y' \* S: E
#include <linux/gpio.h>
1 l3 }1 M) _2 ~8 K* O2 m5 N8 g+ |& z#include <linux/leds.h>+ ]. C q2 B: ]- | V2 N" p6 V
#include <linux/platform_device.h>
. p% H2 H0 Y4 s S1 z5 ^. }2 ~$ v3 g" x4 t* B. B' T
#include <asm/mach-types.h>
; j5 Q- ^ i' ^3 ]8 x* K4 Q#include <asm/mach/arch.h>1 s" @3 b+ L# V
#include <mach/da8xx.h>
7 Y, v2 U$ \# o" v! b- I#include <mach/mux.h>( J4 |- K& ]1 L5 B$ u5 C7 I" @: o
0 p. t! ^0 k3 P6 j: `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 e$ [8 D8 [+ K% i7 ~$ w4 @$ d5 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 o/ s6 y- `4 x+ T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& z H# W; k0 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' I' N$ ?) ?2 \
* A7 o# y- o- ]& I+ q3 M$ d3 O/* assign the tl som board LED-GPIOs*/5 X2 i8 V( V6 {; P
static const short da850_evm_tl_user_led_pins[] = {7 x0 V, t6 w8 ?* n+ f8 l' i( \
/* These pins are definition at <mach/mux.h> file */5 n+ ]( k+ f j7 D7 A+ \5 ^: r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 B! I3 q- g' C) l2 Q [" k
-1. t }- ]$ }5 T! {
};. `5 B8 A4 a" ~) |1 Z0 T
" L1 Y- w1 X; M' ]) jstatic struct gpio_led da850_evm_tl_leds[] = {
# N& a- K7 c; _7 q2 {( w: O% H( T: R {- K# `0 f' ?' Q' P/ C% N1 W
.active_low = 0,$ I4 C( U+ u, J
.gpio = DA850_USER_LED0,% O1 I3 i2 ]$ o) M+ ]) N
.name = "user_led0",& ]* h( j4 `5 t/ L' c( b
.default_trigger = "default-on",
3 G' a8 }, B: Y" o" q# ]8 I },
& \2 i+ I6 e5 z' F1 @3 b9 M+ l0 F; p {
% Q: b" \6 E% n- `+ p/ ~% e0 H8 I' K .active_low = 0,2 h& b0 r. A/ {6 g5 l; {
.gpio = DA850_USER_LED1,
{. y2 h4 X: Y% w4 `% W' w .name = "user_led1",
/ j, _/ i8 \4 | `, R .default_trigger = "default-on",1 ]+ T3 V; i9 f- W0 i! I
},9 s& x g+ ]+ R7 a, M
{
" f: e, ^7 G6 Z" E. n% H .active_low = 0,/ G/ Z" Q4 j1 t* `, O- t* N4 g4 c5 y
.gpio = DA850_USER_LED2,
' T0 m$ L" _: ?. v/ e2 Y4 ] .name = "user_led2",
# i* X+ ^: g/ L' `& \# O- c .default_trigger = "default-on",
7 T7 f# r G. \2 g% R! s5 _ },
0 R4 E. O6 ?# r7 E {
# J0 G+ p; R1 z c .active_low = 0,& w/ L3 l$ i; {1 i: \
.gpio = DA850_USER_LED3,0 t1 t! H. p- S$ o6 i
.name = "user_led3",
$ f; c3 s( G5 Z- ^* m7 E V .default_trigger = "default-on",
; I h1 s: @, d/ l; p },) Q, t( X3 t; m8 s& F L1 n: n0 a' L
};
5 t5 K$ B" y+ Y9 q9 f. |! w
3 B1 I$ W. @0 E- K3 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 L' V, E9 V6 r5 r% f" | .leds = da850_evm_tl_leds,
7 \3 o/ I; A7 O; {0 C) X1 v, g% q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 H/ V; u2 |7 q# H
};
t [5 U# F( r1 X. p
5 l+ l# q7 b* h* E( p3 E3 Z- s) Ustatic void led_dev_release(struct device *dev)) \4 y8 n% E1 u
{ a& [! ~# [# q
};
$ W( `+ A7 O% q, Q7 C+ q; i: P# M, Q. v- T' j8 H
static struct platform_device da850_evm_tl_leds_device = {: {# \$ L4 C; h
.name = "leds-gpio",
3 ?. A9 G2 ? o6 ^ .id = 1,
0 M* c. f6 J8 V$ q# f1 a .dev = {$ Y! Y+ g. [" T, i4 r: z
.platform_data = &da850_evm_tl_leds_pdata,0 P# G t5 Q. @4 n6 h! _
.release = led_dev_release,
+ H& l9 S: o3 S! R. i }- A7 r' \5 X# e! Y8 y1 O
};+ I4 f5 X1 ~/ O
+ ~* a9 y; U' C- D+ S4 m3 tstatic int __init led_platform_init(void)
' C: j: F! F( p: L{5 Y9 Q& l# E# k
int ret;3 P) z1 U$ P4 S9 c
#if 0" f+ Z) ~. z3 J6 ?4 M
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 ^% a7 F( F6 S- ?, l e if (ret)1 v( C: X- C2 p$ F! L+ ^- p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* Z/ m4 P# w$ t/ Y2 {4 n
"%d\n", ret);
# x8 }* q! V7 R9 U7 V#endif# I% V0 D; n0 I- d
ret = platform_device_register(&da850_evm_tl_leds_device);
, b! g, R f6 r9 S: ^* P if (ret)
% }. G! i# r1 V pr_warning("Could not register som GPIO expander LEDS");& l% K& R5 o; n
else/ i; }1 K# b" S6 T7 U
printk(KERN_INFO "LED register sucessful!\n");' F+ i4 v1 D7 M& {6 V: L
, w5 R4 ? }6 T2 ^, L' u6 I5 o
return ret;+ I: z, Z& \3 D( [% n$ w
}
; k6 K' U9 u6 r- F' Q
% ]5 I w/ S# {; \static void __exit led_platform_exit(void)" @: G* X w k: m2 u% V7 h
{! e: x% e! `! j1 t, l
platform_device_unregister(&da850_evm_tl_leds_device);
7 Y' ~5 D1 E1 J3 ^
5 _. a( ^. J7 T8 B) n8 c5 L7 a printk(KERN_INFO "LED unregister!\n");
/ Z; E; I9 I: }0 i% E2 X& O# a}0 V! d! ?3 T) p. \$ H/ Z( O
2 v A- Y4 C$ k" N$ f) H$ h$ i( H5 }
module_init(led_platform_init);3 q7 o, r9 @0 \) H7 _$ Z ]% N. t8 R
module_exit(led_platform_exit);, @4 O8 o9 ?* \: }, Z1 r P
) u% } u: F; g2 K
MODULE_DESCRIPTION("Led platform driver");
$ z+ [- o- \, j/ |. G$ u" }5 nMODULE_AUTHOR("Tronlong");) o* v. @2 ?5 V( {
MODULE_LICENSE("GPL");
& H, Z B; l3 ~6 S) L$ H j* P. }, b, a7 C
|
|