|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 Y; ], [5 o: w! }3 i* h#include <linux/init.h>
1 M4 J8 u% T9 ]& D( Z2 {. |' V1 F1 P#include <linux/module.h>) A5 |+ Z& ]. W5 q- }1 C
#include <linux/kernel.h>
, @9 H- ~3 b6 F2 _( z3 B' M#include <linux/types.h>: B2 X/ d& @, l$ X2 {
#include <linux/gpio.h>
$ Y7 ^, [: H* d2 ^- \. b#include <linux/leds.h>
7 ~" ]1 p* a, E) D( A( {+ }2 v- M#include <linux/platform_device.h>
+ W- R+ \' i* D8 Y( h/ r! d
. T' P/ P7 u) b. W" h#include <asm/mach-types.h>
6 F( j) f" e: @#include <asm/mach/arch.h>% ]* Y) H5 @/ D3 T9 |
#include <mach/da8xx.h>
* w6 x: {2 n8 v2 U, K7 ~( S#include <mach/mux.h>
; W. l- y# d6 E3 v6 t/ J. P3 b, t+ m" j ~. \; l, `0 p0 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* ]9 U; |5 d+ {( g" T8 R3 x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 Q- s' o7 f; k9 ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# B4 X& Y& z( u6 E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' W0 S7 Y$ ~% t% G9 N& w% _9 A+ i
4 y/ r3 A& F3 u' \, t, D' e9 P/* assign the tl som board LED-GPIOs*/( I9 G% b& _, n* m# u
static const short da850_evm_tl_user_led_pins[] = {( n0 U0 j; \7 @! g; ?3 \8 E
/* These pins are definition at <mach/mux.h> file */2 w- f: x. D" ~0 X. x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, k% \% p; H( [& S7 \1 k
-18 C2 G% t$ V( ^* f$ I
};
7 X Z9 |, x# E5 D3 h
. j- S% X& u0 n8 X" J) |static struct gpio_led da850_evm_tl_leds[] = {
, w' Q% U) B0 r: V {
- j3 G4 }$ \1 T .active_low = 0,) O9 a* f. j3 k! V3 y
.gpio = DA850_USER_LED0,9 d: v6 }: j. U. ]
.name = "user_led0",( X; x1 ]( i$ a
.default_trigger = "default-on",
1 t) [; n5 ?4 L! O/ d, A# h },# o7 H9 f6 I+ ~6 Q6 R0 _+ r# m
{
0 O. N1 o5 {. z! x2 h5 X& U .active_low = 0,# l2 H+ q4 b, n% l
.gpio = DA850_USER_LED1,
$ q- O7 p, Z% J. v .name = "user_led1",, ^8 t" Q3 a ~
.default_trigger = "default-on",2 u U9 F' k9 q7 \' j5 q" E+ s) `
},
$ F. z! ]; E2 q1 T! C {0 x! Y; G8 G- `+ ] s7 V
.active_low = 0,
1 O5 P8 L3 X& s/ K" g( ? .gpio = DA850_USER_LED2,% ]$ w9 c7 [+ L3 E) k
.name = "user_led2",5 H. q3 W0 v9 A
.default_trigger = "default-on",, ~/ e$ ^! ]; o) J6 @+ g3 Q
},7 f# _, Y6 u: D6 ?3 U; `& u9 Z
{
* @! ^! s6 Y0 m5 D7 @ .active_low = 0,7 z: q' Z+ n% }; z
.gpio = DA850_USER_LED3,
+ }: M' T. @0 b .name = "user_led3",
5 n! m7 N8 j3 x' H/ v6 h .default_trigger = "default-on",
?2 ? l. f" p, H1 Y1 t3 w. s },6 ?/ s2 S% K% u K- k
};# g. N1 K0 C5 j- h! Z3 |
0 ~# G$ z$ k8 V* _# X# X+ z0 Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; J2 n3 v9 A! i0 {
.leds = da850_evm_tl_leds,, P. S& W4 C+ L( q* D0 i: o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( h0 Q4 d# t9 M# \- _
};/ _* X! ~9 s6 g% U1 a; i
- C* |3 E5 }, w
static void led_dev_release(struct device *dev)
, ~4 h, a- o5 e% ]% ]5 `{; [6 ~; t: G8 W+ w. p8 z0 J. w
};
" Z, L+ I' ^) E% ^% a- S1 {
4 M, I; H, s) S* o" V) ystatic struct platform_device da850_evm_tl_leds_device = {( n' E( q9 z) I
.name = "leds-gpio",8 r% `, S$ X5 l' H4 T
.id = 1,: P: o2 T* a1 s4 I) ?* q3 c
.dev = {' Z# U9 `: H+ o, t9 y v7 M
.platform_data = &da850_evm_tl_leds_pdata,
% j) o, I8 i9 k- ~/ n, | .release = led_dev_release,
; F/ t5 g: b+ p: W7 X5 l# ` }( B: C6 q( w3 B2 f+ h% D' N
};
8 r. v! O, X _& b4 ]3 B2 M# e3 S3 O( M; A
static int __init led_platform_init(void) k- u1 K& s$ f, g* g
{
0 t' f6 v+ U- v2 x1 E" T int ret;
9 F$ f2 o1 E Q- B1 H#if 02 q: D, Z) L; m3 } Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 ?0 f2 ?8 D0 H! B# O if (ret)
# h7 t" b3 @& _& E pr_warning("da850_evm_tl_leds_init : User LED mux failed :" L/ c3 A/ H' ^# q8 w
"%d\n", ret);" G; M0 j- N" R; h" N
#endif% {* B. D+ b/ W* W* }; |0 i& R" b
ret = platform_device_register(&da850_evm_tl_leds_device);' x6 B+ r; Y$ m
if (ret)1 K( l& E( a; Z+ I: k
pr_warning("Could not register som GPIO expander LEDS");
1 }+ X7 {( u2 y else
& S& t+ d& t9 F' h! C9 |7 A8 ] printk(KERN_INFO "LED register sucessful!\n");
" Q' M9 s* K2 Z$ ]/ `
7 \; c# C% z. C5 A c$ n6 Y return ret;
6 `+ n* M: E. [}
- F4 k! j# q! X; w% o* s$ @0 v' H- | m# f! v# r
static void __exit led_platform_exit(void). k. U* ?* A9 L8 P& ]2 a6 G
{
# ^5 B' Q) V4 m& R: g8 x1 \ platform_device_unregister(&da850_evm_tl_leds_device);
' P2 ^# T# _1 ~' F( i& ]& ~
" q8 r) o$ h& [7 C+ g" H printk(KERN_INFO "LED unregister!\n");3 T/ f7 U. R' k) `$ F3 S4 I+ h
}
* ~& b4 u- ?& h/ c2 B! E! ~, H9 H4 Q3 t/ ?
module_init(led_platform_init);
6 G1 c$ c6 h0 zmodule_exit(led_platform_exit);
# P: o* j; |$ h6 ]4 |1 }
! w( m; y" L0 S4 x! J0 w" u) e' ZMODULE_DESCRIPTION("Led platform driver");
6 J( N( r4 k) S2 \$ HMODULE_AUTHOR("Tronlong");
( e2 W- m5 B5 g$ V8 P' ?( pMODULE_LICENSE("GPL");7 O0 A! S' F) k8 o
) q3 Q) b/ e4 U& W4 x8 ?
|
|