|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 D+ ?- \# C/ N6 N* y0 C" O- _
#include <linux/init.h>* G% r8 t8 z+ c# C q* ^4 n, L1 p& X: D
#include <linux/module.h>
* Y; o6 j" {' Q: E# j0 m7 w#include <linux/kernel.h>0 u* Y: S6 _0 l2 q+ [! a3 o$ ~
#include <linux/types.h> Q: W0 T# F' s2 K& c5 S- [
#include <linux/gpio.h>
7 N; L) G% I1 ~1 t) q D#include <linux/leds.h>1 q* F/ O- h& j9 E1 {* ]
#include <linux/platform_device.h>
% S4 y0 x0 l- c9 {. f8 y# q" }% }( g! s
#include <asm/mach-types.h>* z2 v5 v$ r! g' O
#include <asm/mach/arch.h>
0 C: e# y; e; U#include <mach/da8xx.h> R/ u2 n, p4 u+ C' b
#include <mach/mux.h>
T$ P0 [6 y0 b9 @4 S6 j- O4 G R4 B' }% c; [1 h$ [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ p/ A, B, l9 L3 I) O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 ]9 A: H8 X: |; T H3 T, S( O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& P/ ~) c( M% T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( l. y- u. H5 O' a- s/ |& U
6 @4 L. r9 P7 [/ f+ P4 C/* assign the tl som board LED-GPIOs*/
. w- Y5 k/ O3 Z. M% J- Lstatic const short da850_evm_tl_user_led_pins[] = {- [) u {: k; u' }4 k
/* These pins are definition at <mach/mux.h> file */
! s9 f( M( _: z N: P- u; P( h# A) W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' K) V) _* |7 T' U0 J/ y -1
% c3 d/ e* w3 L$ `, c" V% `3 W$ G9 V, T};
- J/ Q( o' C' ?
1 T: w2 y0 F6 B9 o$ L) y* Ustatic struct gpio_led da850_evm_tl_leds[] = {+ d& o( H3 s; Q/ C) N% N
{4 E. l8 m9 Z- j* b6 g
.active_low = 0,. J4 Z& R! a" Q1 C6 s$ x$ @! b
.gpio = DA850_USER_LED0,8 v+ }# ?: j) C' b0 S9 n
.name = "user_led0",
0 D# C/ J/ u+ C3 @5 |. F1 } .default_trigger = "default-on",5 i& L/ V. m: B$ s
},5 J/ L1 E/ w5 y' ~8 j
{
8 y- }) H( ? G' j. Z( M8 k2 ^; Z .active_low = 0,
; S. h; d% j" O6 V6 x .gpio = DA850_USER_LED1,% E& e% c, p; w B1 B- S7 D$ T
.name = "user_led1",' W( `( p! g1 [+ ?
.default_trigger = "default-on",
% p4 D6 ^# B- W, n },
; H: H V2 Y9 \( _3 E& x: S. i {- o2 t! }/ o% u2 s5 O) }3 T
.active_low = 0,
. Z/ T( F$ |: w; I .gpio = DA850_USER_LED2,; i3 x, J0 y6 D# Z& q4 `
.name = "user_led2",. R- [0 Y0 K9 {* _
.default_trigger = "default-on",* U6 `8 l) b8 W+ s6 m
},$ |/ x6 ^% O* U: x
{- d/ | w; M7 @5 k# Y
.active_low = 0,
' X* x @; O" ? .gpio = DA850_USER_LED3,$ {# q/ a$ o4 o3 b8 V$ i5 H
.name = "user_led3",
, _2 t8 X$ u2 }- L .default_trigger = "default-on",
/ E* J/ o$ a) r: n },
" w3 f @8 j; M, D( z* w};
7 r: @6 V& z, A; H) p
! P2 }* V8 }7 V P ^1 Q. zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 X! S2 o) {/ [( S6 ]: L6 Y .leds = da850_evm_tl_leds,
0 r! ^4 T$ f3 V! h2 B- |2 S3 F/ x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ |7 }1 t* d. R; Z6 q. A
};/ A3 f t: X, Z. v$ L# q* ]
3 Q+ }$ v2 h v; cstatic void led_dev_release(struct device *dev)
; y; `- o' N) S2 z, Q{
[3 X- h }6 ~0 p: @3 X( s: a};1 e$ m! e1 b u
# d- x+ [& T' d
static struct platform_device da850_evm_tl_leds_device = {
, h: g* C3 G5 v( I .name = "leds-gpio",
0 k3 P! X" v1 B6 X2 `- I" \ .id = 1,' Z2 G( z& {9 `% P6 P9 |
.dev = {8 s) s8 F7 i J6 @
.platform_data = &da850_evm_tl_leds_pdata,
. {3 [' r8 E1 J; M .release = led_dev_release,
! B# `2 r5 {" o: z8 U9 ]2 a }& |. |, T+ v/ x$ v; G- [2 d
};
4 P9 b# y" r* I, S3 T' u8 Z+ e) U0 {
static int __init led_platform_init(void)/ H# E' q3 h1 x5 a$ g
{7 |9 O1 m: D: C0 X1 ~' D
int ret;
$ s3 }# i/ f) K& _7 Y9 _#if 0
2 {, Y7 q9 J& u, K1 ~& A2 d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, R3 Q9 }# [1 O# ~' O& v/ c! } if (ret)
8 E& a) G# _, P- Y0 b pr_warning("da850_evm_tl_leds_init : User LED mux failed :") ]& Y7 U4 E' P. Z5 F B& I
"%d\n", ret);
- h# y' G% b* E! U3 F#endif
9 S$ ~4 K5 B2 u) B ret = platform_device_register(&da850_evm_tl_leds_device);3 E: n3 ~9 l; h% @& S. S9 D
if (ret), {! t5 I5 h# i+ T* \$ P/ e
pr_warning("Could not register som GPIO expander LEDS");
# u7 j$ H( I+ Z f1 [' d0 _ else" N$ ]2 v! b: Y) ~, i' }
printk(KERN_INFO "LED register sucessful!\n");
3 {5 S$ e7 ?3 A6 T2 l( k3 u) {4 m4 }* W, N: P) b/ U6 u. Q
return ret;% `/ k, ^2 v, T4 l$ d' [, D4 W
}
# ?) I8 n$ H; j4 `2 u0 c
; ^3 R9 O; v6 fstatic void __exit led_platform_exit(void)
- _/ N9 x( s t w5 x{
! K/ f/ X9 ^! q8 q$ Y platform_device_unregister(&da850_evm_tl_leds_device); R7 E/ q+ ~1 S1 h; t4 Q
# v- P6 T0 f4 H7 i& W1 b; A; L printk(KERN_INFO "LED unregister!\n");
9 n5 n2 X! I( l$ n$ N}
) X3 [! N) w2 v7 Q. B( v* M( v! g9 P* t, \
module_init(led_platform_init);
/ N! u" f' t% _2 |6 Vmodule_exit(led_platform_exit);* d1 b. Z- m- x+ Q( K& @
! H) j( A( e1 y7 ]2 K7 L. J
MODULE_DESCRIPTION("Led platform driver");7 o5 N6 z+ j2 Z. L' q2 s( h; q
MODULE_AUTHOR("Tronlong");
5 q3 V+ z5 K2 cMODULE_LICENSE("GPL");5 w, d, G( ]. _
3 u* s- ? n3 D, I6 A
|
|