|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& ]) d+ L* E7 t: H
#include <linux/init.h>
/ e' t% b7 e& ~$ z O# B" @#include <linux/module.h>$ a# j" t4 L1 v4 s* p# e/ V* z3 B! c
#include <linux/kernel.h>
; z' `2 {8 ]; E3 w8 c3 L#include <linux/types.h>
& A$ M, e. {2 Y+ r/ w8 Y/ {+ I#include <linux/gpio.h>
/ T% |- T T7 j. [#include <linux/leds.h># g r2 u2 D/ w+ ~4 E
#include <linux/platform_device.h>
( E" F& b+ p& |, ~3 I6 {; H* Y" i5 w! ?1 l. `3 ^+ \
#include <asm/mach-types.h>( Z9 X/ {, ~/ x6 c9 [7 z
#include <asm/mach/arch.h>
3 e& F. m1 n+ X% G5 A! h#include <mach/da8xx.h>8 I9 C& U& T7 s
#include <mach/mux.h>& a7 r8 u* |! P$ Z8 Z1 ^0 U
3 D: H$ D8 g/ _! m! s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" j* f4 h8 B6 L1 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 \9 G! _8 Q) N. b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 x% a) A; C0 Y" E( e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ S) p! C- m+ i) B ?
: ~7 ` p& }' X2 a: O8 o/* assign the tl som board LED-GPIOs*/
! V) v. l3 @) t, ~# y. Jstatic const short da850_evm_tl_user_led_pins[] = {
2 d$ E) ]: _) v* [, F /* These pins are definition at <mach/mux.h> file */
1 l3 i, `/ }. f" ?' g" g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) p6 t( c H0 e& I
-1
6 L/ \9 T$ ^; l. F};
0 a' s* E M6 v( m7 a4 u6 D6 P' v; r! Z; g/ ]! @) y" H
static struct gpio_led da850_evm_tl_leds[] = {( o6 m' ?7 ]+ S' A; `6 A
{
9 I6 T( a/ {( I/ w5 p! r6 G) o .active_low = 0,: `/ k% F3 j1 l. [& a+ Q
.gpio = DA850_USER_LED0,
- s) Z. |- w5 N& L .name = "user_led0",$ T# C6 C/ j' k
.default_trigger = "default-on",
, e( U6 {# p( z- z' r* R$ r' ? },
0 E; }6 U5 Y0 T6 o3 | {3 Q3 ?1 \+ p8 s
.active_low = 0,0 k/ ?6 y; X/ x7 R
.gpio = DA850_USER_LED1,
$ N3 n7 O" r& r .name = "user_led1",' Y( w$ [0 R" k) Y* ~
.default_trigger = "default-on",
* @- _' L, \" p/ O9 z },
* D- D! m, x/ {4 o7 ? {8 R1 B2 D5 ]1 j+ H3 B
.active_low = 0,
8 z9 M8 C6 h0 X, W- ^5 M* y$ a .gpio = DA850_USER_LED2,1 K8 @ N+ _8 Z4 F! F. Z8 I8 B# E
.name = "user_led2",1 n( r$ B1 q/ ~2 i# h; i
.default_trigger = "default-on",
" {* O+ |" Z6 m. ] },& J. w* D: G2 L$ F
{) ~- x; E0 n7 p b* E
.active_low = 0,4 U: }# `3 B: r0 [# c
.gpio = DA850_USER_LED3,8 E: J* @" I) d* l
.name = "user_led3",1 g% Q: B/ ~; h/ ]5 q, W$ }( {7 g
.default_trigger = "default-on",: F* n \9 q+ j4 e* ^
},7 h4 i" G5 S- q" h: P$ X( n9 l& O5 o
};
}& z$ d% I6 B1 ^0 Y' d$ k% W8 j5 `; X3 U t7 d+ V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 k/ K6 [. O/ d7 a) z) D
.leds = da850_evm_tl_leds,& O$ }7 i: N# t+ T6 ~, h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; u) v: S9 R8 R1 }};2 s \. V$ ~" x' ]3 ]
9 S& n4 p, _% F& p- c, r* H3 h
static void led_dev_release(struct device *dev)3 j$ c/ P$ D. W% d% Q
{
( ~+ z \: |8 l' ?$ `# Q3 P+ n* C. }+ Q};
2 u" F" E% M) k' o m) |. ?
7 x, N d" |# u4 S6 u1 ^- ]static struct platform_device da850_evm_tl_leds_device = {
9 f0 M. X+ c1 u; e! Q `% q .name = "leds-gpio",
$ k/ a) S* m. P .id = 1,% d: u# M( j$ x: l* f; T, l
.dev = {, z+ k& y1 l' z x' Y7 z
.platform_data = &da850_evm_tl_leds_pdata,3 H# c8 n+ @6 J9 @$ @* \, `5 m
.release = led_dev_release,
& X8 g" e' h8 F3 Q$ d }8 {& z* ~ ]' ]. F
};4 X1 H5 s7 i5 ^$ m
9 C' T/ z. M7 u0 w, o1 ystatic int __init led_platform_init(void)
% a8 B$ L5 W8 G C9 r, Z{ m% K8 l, N) N7 o4 G1 u; Y0 }
int ret;
7 w( S$ C( j. g& x2 r+ w#if 0( k3 h0 l1 K1 N7 ]) M( ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; i C- k1 D6 B% ?/ Y, f if (ret)
; p; v [3 I3 {4 k& R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ P' P0 ?7 E2 b7 R. u "%d\n", ret);0 l8 v/ S: e1 t2 n
#endif' Z6 M$ r+ p, `% t- i
ret = platform_device_register(&da850_evm_tl_leds_device);
& X4 D" G* b7 {7 s8 \6 E0 j if (ret)
0 [# g3 j W7 G, @$ b) j pr_warning("Could not register som GPIO expander LEDS");
- X4 D; k7 l% Y else) D3 r0 p; `. P# }' b# k
printk(KERN_INFO "LED register sucessful!\n");
, l7 y5 P9 G" G- w; D
! ?6 c' o6 w: H; b+ }4 m: o return ret;! ~3 Z/ c3 S! S. a1 [+ d1 L }1 l
}, g* h8 x9 n% B ] ]8 P% O% C
3 _, `$ Q% d5 r' _. W0 j& |; t
static void __exit led_platform_exit(void)
1 f4 z0 D/ _# E! z6 Q* J{2 ]" t! M! V/ M3 R1 {
platform_device_unregister(&da850_evm_tl_leds_device);/ B, ~0 Y1 e" u8 b* N$ W
* Q; z4 j6 q/ F6 ~) I4 v& T printk(KERN_INFO "LED unregister!\n");+ {" B+ L$ p. Q' j* `1 p
}$ S+ Y- @( m; R) u+ U
G9 Z# m7 O8 f; z! U
module_init(led_platform_init);' L% D+ U2 M3 |
module_exit(led_platform_exit);
% `; b2 |, {/ G d: T5 M
% O( E2 G: W# F8 P2 Q7 aMODULE_DESCRIPTION("Led platform driver");
7 k& B8 @6 A2 A& K9 @MODULE_AUTHOR("Tronlong");% G2 O; s j& q+ J- E) D) W
MODULE_LICENSE("GPL");. P# m8 X& `8 L' ?+ I
) v8 ]3 ?. d7 h2 W1 I8 R0 F/ W1 E% P, m
|
|