|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 Y; @8 y1 s& n7 f% I#include <linux/init.h>
' S) n$ @4 D# ?0 E9 s#include <linux/module.h>
% ]# X! g+ s9 x. i) N7 x* x#include <linux/kernel.h>- y) U! B8 M. D8 q& H. H' h
#include <linux/types.h>- Z8 F2 v- n; J
#include <linux/gpio.h>
& Y+ S) M W% O- l/ @# f#include <linux/leds.h>2 A# ]1 k$ C; m3 c+ r2 i/ c/ @
#include <linux/platform_device.h>
7 V: j1 |$ L C; t( a6 s- {, K5 y
#include <asm/mach-types.h>( `. r( W k& N) O) W6 T% x
#include <asm/mach/arch.h>" ]3 B4 S( ^7 S; l7 r# {* [; U
#include <mach/da8xx.h>) N4 k: |& {! g
#include <mach/mux.h>: f; L) f* O0 F6 B8 q6 l# i
3 E" G# ~( K5 y7 g1 b. W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! a1 F/ w2 o: H9 v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 w) R* M2 Z. `3 \. z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( t4 k+ U+ Q! B4 z# ?9 A$ q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) n( Q3 K: a0 q$ v4 z8 c9 p& r
- k) c9 R. ?" {' d7 h7 a; m8 U1 _
/* assign the tl som board LED-GPIOs*/: d1 b3 E2 c! Y/ R' \
static const short da850_evm_tl_user_led_pins[] = {
2 q5 C) r: t) b /* These pins are definition at <mach/mux.h> file */
% F. P- b6 e9 W0 F& v5 ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' l3 J. l7 ~- `& E -17 T. A& v1 \3 _) L% h+ f0 T7 }7 N& y
};3 o) ]. p) G& h% ~1 ?$ {
- Z, I/ _$ Z6 H: U- g
static struct gpio_led da850_evm_tl_leds[] = {
& E' [8 t: i: f9 m5 T7 L {
' Q3 ~$ t8 i; i1 s, P+ L .active_low = 0,
* @8 |1 E) `) q; t+ S- g .gpio = DA850_USER_LED0,- g4 f! D+ \+ X9 c
.name = "user_led0",
8 N! L3 `1 G1 z# P, T .default_trigger = "default-on",
& Z* y" ~1 y# _! Q% K( D },
+ L' r% y4 N4 t; P n; H6 j {
/ v2 V. f1 @8 n .active_low = 0,
. n: a! @% z# ? .gpio = DA850_USER_LED1,
$ y) k9 R2 u6 g9 P! Q5 \ .name = "user_led1",
; h: Q8 J7 x+ f! c .default_trigger = "default-on",
! c) i8 l! |5 y* N* ~4 r' ^ },) _+ E4 i. f/ ^
{) E. r, L$ `9 m: {0 G8 @- z$ W
.active_low = 0,
' B9 G. [+ q- {4 k7 _ .gpio = DA850_USER_LED2,
" r/ { s+ ?' y1 i2 q* _ .name = "user_led2",
9 C) z! @. n$ V' u .default_trigger = "default-on",8 ^( n' p. K) a/ @
},
8 k6 n% b L, F2 W {3 n/ v d1 k6 y1 C8 n. g0 `
.active_low = 0,
/ e6 J/ R4 r f! _ .gpio = DA850_USER_LED3,
# D0 T9 I7 Y# `( W# y+ u3 d .name = "user_led3",
/ \5 K8 `8 z* ?# J P .default_trigger = "default-on",* E4 ~* D* }/ N9 g- j8 R
},% C' S c, {: P. s
};
; N# h$ o+ E" t/ C
5 V% ]* R0 a1 f! Y1 w7 C2 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! u1 K# `. m4 t5 J* b1 H& x3 d
.leds = da850_evm_tl_leds," p) m5 J2 \3 Y3 d+ _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; e3 a/ W' ], W" k
};" A! d9 q; w: X' D# P
! X( e# G/ T/ A' j3 k% S; ]static void led_dev_release(struct device *dev)
: F* V4 h9 v$ O) B b5 c2 i{
, G% k# b, L9 y) w( G};
( [5 g# S& S v& V/ P4 L. W, C- `! [& K5 G
static struct platform_device da850_evm_tl_leds_device = {
7 ]% q6 I/ C4 ?! j9 k4 J .name = "leds-gpio",! u- p$ g# N1 } f& S
.id = 1,
3 v# [5 b Z! `7 |! Q .dev = {# P; t. f! p7 X u; O) y; m- o
.platform_data = &da850_evm_tl_leds_pdata,
2 w1 b; `- W a5 w F .release = led_dev_release,1 Y+ p2 J% j+ W: ]
}
% X. u' v8 ?# p0 _- |" W/ e};. R6 `6 }/ M5 l% Z0 Z
; R# [. G$ f9 K7 D; J
static int __init led_platform_init(void)
$ o9 X$ U! B( n& e. d, a% u* H Y- o{
) X4 s, \' r t+ S( c int ret;
! }1 |( s9 }2 b8 D5 _/ x, |2 |#if 0
: K/ [% O% P3 y9 U; `1 h, f& l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) R5 o0 y: N5 ~" K8 Y$ N. M if (ret)
! ]: r0 g+ }1 k% j' Q l! f/ @: U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: s5 d* n" ~* [8 P5 A2 e "%d\n", ret);
# r& w+ c" Q& ]1 }- a! H. R#endif1 R2 a, Q, h3 H, V" r% R: e
ret = platform_device_register(&da850_evm_tl_leds_device);
& W3 t- ~9 D# ~& m- {4 S if (ret)
$ n' W9 _0 V% b/ g) k pr_warning("Could not register som GPIO expander LEDS");8 D+ c7 }' ^0 y+ \3 q8 V" v% }
else" y+ u1 t! X+ H. A
printk(KERN_INFO "LED register sucessful!\n");
9 X, d# M4 G+ t. t F
# w, U9 {" z1 X3 p) R& v* | return ret;
2 e; W/ ?9 x' R2 g}# j0 z4 A' ]' y$ P# W
8 a2 O; `9 A1 D! [static void __exit led_platform_exit(void)0 K3 U' c: r$ t3 p+ X6 F
{
6 L( ^# p# l/ t* r0 |) Q8 E& ^ platform_device_unregister(&da850_evm_tl_leds_device);
+ E! g- m, w T& f: G1 k
# A0 j% y3 z, `' O printk(KERN_INFO "LED unregister!\n");
6 @, P* }( N* p$ o! i}5 w6 J0 j6 k9 G$ {
' E# ^, I9 i) ], Hmodule_init(led_platform_init); u* o( P. E' e: A- C, p
module_exit(led_platform_exit);
S1 d0 z) z8 f6 b: k2 m" X1 r6 [, w" x3 z P9 Y' r
MODULE_DESCRIPTION("Led platform driver");
4 x5 O0 j0 @& R4 [$ T0 \, i; yMODULE_AUTHOR("Tronlong");* q$ v. c' S$ x! B. |) Y t
MODULE_LICENSE("GPL");
( d3 K. j4 T- h/ t- D1 Q! c9 V
y2 r2 ?0 r8 h, [& Q; Q' F |
|