|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# u/ ~1 {3 s4 r#include <linux/init.h>
) A/ j/ @9 r# O0 C* m#include <linux/module.h> n# l ]& D3 b- j
#include <linux/kernel.h>$ p$ R% q9 l: }6 `$ z9 I
#include <linux/types.h>% j. l9 l. d% A# h
#include <linux/gpio.h>/ C. K A# g& c6 q) R0 [ ]
#include <linux/leds.h>
. W- Z/ |" F; P5 v# c. v#include <linux/platform_device.h>
: e. i5 A6 Z. p: J/ j; k9 }: c2 V2 g2 s0 T
#include <asm/mach-types.h>2 p' V1 X9 ^, d) L
#include <asm/mach/arch.h>
3 m0 }7 @( Y& F! S7 w. c#include <mach/da8xx.h>$ K9 j- W: ~( q! \8 D& U" @
#include <mach/mux.h>& {# f7 x% o) ~' P; n
) A% l" i- d% x' }' I& ]% d, r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) V4 ?& Y- v1 S) F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 ~8 V, E! z ~% A) z7 j" r# r! b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% {* Y0 n$ _! `+ X9 ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: i+ r, G( F: Y5 q5 Z) a9 I% D4 x' E) S" j$ `' l
/* assign the tl som board LED-GPIOs*/0 J% w" p% x) I* m
static const short da850_evm_tl_user_led_pins[] = {
* x/ ^3 `0 L% Y3 X6 a /* These pins are definition at <mach/mux.h> file */
# c4 V9 o$ f( r4 i& H. } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 S$ E4 N7 g# u -1: ^& s! _- n# u* w. X0 C
};
% `; T2 I1 [2 b* X) Q/ t
/ V, s2 z1 u4 ~# E6 G U7 e9 hstatic struct gpio_led da850_evm_tl_leds[] = {/ ?* `: x9 }' z) \) G
{
( {! z- v+ u( ~ ?) Y, T .active_low = 0,
( e, J$ C4 Z: A .gpio = DA850_USER_LED0,
8 n1 o- n' U5 E7 j* [ .name = "user_led0",
! f: ^! B: V4 J a6 U5 N2 j4 L .default_trigger = "default-on",
. Z: n- o) Q; Y. Q n },2 X# l9 {2 u5 T0 g$ Y
{8 Y/ t, U# i$ {. A+ A+ w
.active_low = 0,$ R/ S1 u! o/ G2 S
.gpio = DA850_USER_LED1,
4 V; g( t2 N7 ~! V .name = "user_led1",
2 |" ]3 O6 o1 R3 {+ W. A: T .default_trigger = "default-on",
v" q7 q. h) @% r: @( i },' `0 }9 b" S) P0 H" A3 X( k( b9 M+ f
{
, N8 b0 f V) A8 A( S% I .active_low = 0,
2 E$ x! z, B; `' q% T .gpio = DA850_USER_LED2,
: \2 G- b7 V. R9 E2 N+ R( h .name = "user_led2",
: P! ]3 g/ g1 C) W* S .default_trigger = "default-on",
) J' F2 P, Q" k1 s. a9 h7 I6 @" W/ y },
, L/ }5 [! k7 M# t% e* ] {
5 j% u0 W" G; m' S5 t .active_low = 0,
9 t& V* R2 C: U+ n, [5 e .gpio = DA850_USER_LED3,
6 x+ |( b" j$ d .name = "user_led3",
% Y. c) g9 |% X4 `: h$ S6 \2 r .default_trigger = "default-on",
9 [# ?* q' J) c e' }" l- u },
! \, j7 a4 }7 g0 q( ?0 ^};% O: v9 V6 D5 W( G
% l B4 p: u0 o6 q% o
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: T- p6 t g) Y! m( K0 B( n9 I$ w
.leds = da850_evm_tl_leds,
2 }1 y+ J8 b1 c0 f1 E' H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 S$ F6 M1 T5 p: K) H
};( Y9 [! U6 ^; c8 ]3 U9 s
# ^" d4 @) N9 Z# }1 |
static void led_dev_release(struct device *dev)
* g& x- V( x4 K+ w{
9 m% M7 y$ C' E% u};
! y- Y; J0 y, O# }9 }% C' K# s* p8 l! w* l" x2 d! Y: E) k9 n8 s
static struct platform_device da850_evm_tl_leds_device = {$ @- K: a6 ^7 H% G! M
.name = "leds-gpio",8 v, I% K7 e0 |) S
.id = 1,: T, r, |/ P6 \+ z! Q
.dev = {
$ s- J5 u2 F: }2 I3 w" V$ o .platform_data = &da850_evm_tl_leds_pdata,. P! m! c, X% f* X! Z
.release = led_dev_release,
2 ?. B4 ?! q5 z% I4 T }
3 G1 p9 b) n, o};" N# @1 \) ]- h$ N; M1 }: N$ a
8 ~; C+ y5 j% ?
static int __init led_platform_init(void): M P; H- `$ c+ A2 d1 d
{
0 b# E' u2 a: f8 Z' U* ?) i# V int ret;
4 l' I3 Q' {5 p) ^3 S#if 0
2 Y3 s3 I: j; F5 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 w1 l2 |/ }* f) S( a if (ret)4 Y8 v9 R: V' r1 {# C2 L! ^' ]( B$ Q# V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& r% h4 P% \) y5 H4 ?0 w7 F "%d\n", ret);/ _5 ?/ @5 s' V+ E
#endif
/ N9 @. C7 ^7 H6 \+ L9 { ret = platform_device_register(&da850_evm_tl_leds_device);
3 }" `: ]1 j/ ^1 E& Z if (ret)' _: N# {2 h5 ?. ~
pr_warning("Could not register som GPIO expander LEDS");
6 v5 l% H0 q4 X else& Y$ Y8 ?) m: {; m4 f
printk(KERN_INFO "LED register sucessful!\n");
4 L5 n0 L( V# ?9 L2 j/ r3 ~9 y1 s5 z& T; x' T
return ret;7 J# h d/ f4 Z
}
7 M$ T6 {% L N3 S1 |, k8 G5 T6 x* e3 ?5 [5 U4 }+ }2 @+ C$ y
static void __exit led_platform_exit(void)% V# T3 Z! s8 J4 u
{
: U8 q0 P5 R' p8 d! U* d platform_device_unregister(&da850_evm_tl_leds_device);+ I- _! G. f% ` B6 p& ?
5 N2 @* O. r+ x8 i printk(KERN_INFO "LED unregister!\n");# d0 Q7 g) a- \* h, g+ e
}( w" R' n) {- x$ v: U6 y& w
/ E$ {/ y( E- F0 l# U
module_init(led_platform_init);
% ]) b7 a0 Z: I/ O7 vmodule_exit(led_platform_exit);
5 C9 R B$ ^+ \9 x/ r- N& }% Q5 v! t9 g/ q) A
MODULE_DESCRIPTION("Led platform driver");
. ]1 ^- P, H; r' c) C: d2 EMODULE_AUTHOR("Tronlong");1 h! x3 d3 i6 Z4 Y* ^& G, b
MODULE_LICENSE("GPL");
6 q( F% ?' ^% V: u' q+ s1 |8 f& y) N0 K2 j- r
|
|