|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) k8 Q! \& F1 u, u8 L5 ]! m. {4 w1 m
#include <linux/init.h>
* \" S! X( q9 T& b9 B#include <linux/module.h>
/ n1 ^ |' }& t+ R. u. J g#include <linux/kernel.h>
. ?6 b7 ~ }% \2 g9 w#include <linux/types.h>; u3 B: c4 P0 L* g$ Z ^2 v T* n
#include <linux/gpio.h># S ^8 E, s: Y+ l9 R
#include <linux/leds.h>: Z3 N8 ~( }* _/ j
#include <linux/platform_device.h>
2 S2 G6 d# Y! U( b: q
8 @/ i) d: b8 j& z#include <asm/mach-types.h>
8 ~. F7 F% ~& t+ B. k#include <asm/mach/arch.h>
+ j: ~. {, o4 T* R8 n; r) k#include <mach/da8xx.h>
' S" o9 Q% f. M. f. M#include <mach/mux.h>' ~5 @+ e7 v8 ]" D: L
) A; }+ S$ ^' \4 d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ {# T/ k' d3 T1 X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& [1 k% V: a$ Q# g/ ^: ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 e3 p! k* S4 }6 w$ t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); M8 O0 F q3 b. }2 J% d- f" G" c
/ u6 L+ P; s, t
/* assign the tl som board LED-GPIOs*/# C" i, j8 P# S9 T0 u! W
static const short da850_evm_tl_user_led_pins[] = {
# r Z D, M1 F- S. B9 J* e /* These pins are definition at <mach/mux.h> file */
[/ r/ }! A0 l, y# X7 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ z. G% M; Y- j/ k/ F; x6 o* [ -1
: f/ \) s* l* |};# p4 |$ b2 C5 B; R
! y/ S6 `5 T: s' \
static struct gpio_led da850_evm_tl_leds[] = {8 u8 } W2 ?: R5 i% a$ B- \+ ?
{
0 v4 G# O! N0 i* t! i .active_low = 0,$ Z3 j' @' t7 w& A Q
.gpio = DA850_USER_LED0,
& |# S* B* E1 P( W: e! o .name = "user_led0",
2 b+ }' Q* F) v .default_trigger = "default-on",, C; p# d$ r4 v
},
& a/ K6 P4 j& h {
. ]0 @. f% X- h9 ?! @ .active_low = 0,# ?, M% B+ [! M# W8 X% M# b
.gpio = DA850_USER_LED1,
3 U' u2 B$ K7 Z9 z% \/ w+ ] .name = "user_led1",
' G z* z; {4 B+ y .default_trigger = "default-on",
+ N# R! x9 z q# ]. F+ C },
- y& J2 r9 b A5 | {
7 G, `. ^' N& O9 L) x* x" p .active_low = 0,
- p( ~4 V' D" l- X( t$ R! ? .gpio = DA850_USER_LED2,
& S3 Y5 L( |$ n2 A5 H6 m( ?; Q2 A .name = "user_led2",6 s5 \; G, y$ _
.default_trigger = "default-on",
. K* p1 p- a- s3 p& R },1 R, g- {( ^; }
{! U* Z4 Q/ U, V4 t+ K$ n/ {
.active_low = 0,
3 ? Z% ?' t7 N+ s .gpio = DA850_USER_LED3,
" I6 Y: B, P- e .name = "user_led3",
- J: A( W, d% x0 J" E4 e; h0 V- | .default_trigger = "default-on",9 k4 F0 U5 ]7 L/ l
},' N, U$ L* D5 i& S
};
9 h# O& X% G5 G4 V8 {' o8 Y- }5 z* X7 V6 l3 i, [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 b& Z) t9 F. o- X. M% S
.leds = da850_evm_tl_leds,
2 O( m4 {6 i+ r9 M, I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 m0 q/ M) {/ G7 A Y x& k
};
8 I: D6 a" @2 c& d8 D, b& W; q4 y3 q+ w: g
static void led_dev_release(struct device *dev)1 _/ T" ~& I$ ~
{
" l) g' o8 L# k1 N};
+ C! E$ Q- o3 P& C0 ]: d- ~. t6 I* [" _; o, R
static struct platform_device da850_evm_tl_leds_device = {
6 w; v" R! Y1 a) S. m' J/ [& V! H .name = "leds-gpio",1 M! T0 m4 z& L5 C$ M9 U
.id = 1," [( X) H; d! r+ z' \9 Z( e
.dev = {: B# x- |8 K, L' P+ z
.platform_data = &da850_evm_tl_leds_pdata,+ x% `/ l' Q$ |) G- Z
.release = led_dev_release,$ ^' M3 F) N6 x
}
" ~* h3 T% g& [/ S1 E* @* z};, b2 _, b0 C( x; N$ E
1 Y3 H v* }/ Z( {' y0 P
static int __init led_platform_init(void)
$ ]' q, p+ L" A0 R) ]% @6 ?{
% p( B ~4 `! v5 D* Y! n int ret;! @) R4 T4 J' \/ k; [
#if 0
/ i. j" ^3 t/ i ^9 {6 b2 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' M! q; H+ J9 J& B4 c
if (ret)
( J2 u3 b3 Y% M# v* B! M) I2 F6 o4 M9 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ h, |& I" i6 | R* X$ I5 @- A8 ?, B
"%d\n", ret);
' G- s, Z6 Z& W, c+ [#endif/ P, w! p3 R# R9 L* |/ f; w$ V
ret = platform_device_register(&da850_evm_tl_leds_device);" w7 g# ~! l+ J" r
if (ret)
& v @5 c8 ]1 `+ V! Q pr_warning("Could not register som GPIO expander LEDS");
+ @1 [5 j" f7 k0 ~6 x/ U6 a/ s/ M- k& ^ else
1 X# ^5 e. x# j2 h. k. J9 P printk(KERN_INFO "LED register sucessful!\n");
g9 r5 M& T7 @/ a3 ^8 N7 B: z
return ret;
7 M4 A7 u2 C& F, V% y}2 w- s- ?# g9 p ]- X
3 s p) e% X& W- w9 L6 a. dstatic void __exit led_platform_exit(void)
) s7 o7 l+ T8 `* H! n{5 i) F; P& U; d* P! @
platform_device_unregister(&da850_evm_tl_leds_device);, x) u+ G( M3 z4 E
; ?1 U5 D1 j6 E* V' V/ G2 ]* p' f1 {; j
printk(KERN_INFO "LED unregister!\n");
: Z0 w3 F& o& J3 }* n}) i( B0 H# r* P L
9 \; k: X' J# P I7 w
module_init(led_platform_init);7 e! r& y8 |0 C- ?# }( v/ b9 J
module_exit(led_platform_exit);
5 e- l# x% N+ v
/ K: ~4 S2 q! C; eMODULE_DESCRIPTION("Led platform driver");' A% C; g) c8 I" G) U G1 c1 _# y
MODULE_AUTHOR("Tronlong");
8 J+ \) l# X9 I* ?9 L) WMODULE_LICENSE("GPL");: z! _7 o% d( u3 ^
1 G6 J- q! [8 `- X |
|