|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 V4 K+ E9 t5 \8 m+ v#include <linux/init.h># z2 f6 T& }% L
#include <linux/module.h>- i5 Q! r" h3 B2 M: B
#include <linux/kernel.h># i4 j6 e; p* Z3 z
#include <linux/types.h>
- l" H+ J6 @: ^4 b1 w. u0 D#include <linux/gpio.h>
+ m* e. W1 h4 \% v m* G#include <linux/leds.h>
7 s' w$ ?' d0 u; S! S9 o- Z#include <linux/platform_device.h> Z" u. v+ C0 v3 A1 G. J
$ M" T u1 \8 [" T! W( f0 _- A3 N% o
#include <asm/mach-types.h>
9 y$ [' g' a- q. Y4 G#include <asm/mach/arch.h>( `9 w; n1 R/ V0 s4 f J
#include <mach/da8xx.h>2 p7 D1 w* M5 {
#include <mach/mux.h>
/ P8 b7 { U4 ]. {' j; Z" ^% b. i
2 x8 W! S/ o! K* N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; Z5 g; B# a( U x4 ~ \ H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" p' X( N k- @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 D* {: d4 l3 c1 L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. q$ `3 q; ~( B. u/ ]. P' G. m
" e8 I0 V4 z4 [; b. p# n/* assign the tl som board LED-GPIOs*/$ G$ [4 u+ K, P( w6 D! p7 ]. ^' g
static const short da850_evm_tl_user_led_pins[] = {$ O* f$ h# F n% a, g* z0 o
/* These pins are definition at <mach/mux.h> file */
+ E" o- [# o1 @7 M$ {; G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 \6 p. |% {8 U8 s -1& u& N7 @: L f {
};
* A; S ^5 x7 X2 \- {" G- \8 Y. {/ e) P6 f
static struct gpio_led da850_evm_tl_leds[] = {1 L8 I- x, w$ P+ s
{
# ?! c$ u% w5 N2 @$ K [3 l: j .active_low = 0,: O& a2 J8 Z. R1 M i! k4 b* y- G
.gpio = DA850_USER_LED0,+ u" ]" M- q. ~& d
.name = "user_led0",
1 {& ~; d( o1 m! n# b7 E .default_trigger = "default-on",
8 S& F$ Y* w( W },4 N% Y. D+ x- W& r
{! Q, h- k/ B# m4 c5 z0 F/ }
.active_low = 0,7 P, @7 _# z9 k
.gpio = DA850_USER_LED1,
. N/ S* u W2 D0 n+ l, d' y .name = "user_led1",: T" A c0 n- x; q0 i5 G$ o6 Z
.default_trigger = "default-on",
. W( W+ @3 V# C },
) I8 P6 j1 v x3 M9 W& | {, N6 C( k+ F: D5 B1 a, O# S
.active_low = 0,
: h+ L8 b j f( k- Q1 S .gpio = DA850_USER_LED2,
, {0 q" w' s& ^: r. ?6 v .name = "user_led2",
, z; C/ p, y2 U! g& Q .default_trigger = "default-on",9 [" g; K+ q7 [4 ~& {0 B
},
" w% H W' w i {
" Z/ _! _( G9 i$ c$ i) e* k .active_low = 0, I) H9 n0 V- h8 `0 D D
.gpio = DA850_USER_LED3,
- v! K6 t& ~& F) D7 d' x .name = "user_led3",9 i* Y1 B, v4 S. k) ~7 c) `
.default_trigger = "default-on",
/ l6 P9 Q. s. |9 _9 \ },' U2 k$ A Q3 R! [% J; X
};. s! `4 c5 i6 \; u
; \1 q4 \, l n3 m% T3 u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: e, y. ]( G$ ~9 K4 r .leds = da850_evm_tl_leds,0 ~& S- W' s6 i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, R$ y6 H/ L) ~4 U) k* W
};" ~. s; e2 r- i( U8 q
# \8 l" S! ~ t* O0 j
static void led_dev_release(struct device *dev)& Q- i5 t& i1 v p* E' I& ]) Z
{+ \) r1 Q6 v: U' }3 b0 z7 w
};
2 ]( c9 p8 G! V, d# b
4 d# ?& Q* X% Istatic struct platform_device da850_evm_tl_leds_device = {6 ^5 c+ V* L, \4 t- n0 h" y+ S. @
.name = "leds-gpio", @- `- g) |7 R) Q) _! m% ~& Y( [
.id = 1,
; B* F2 d" y7 g9 g9 ~ .dev = {2 f3 t% d3 n [6 A" G \. N2 F' }/ P
.platform_data = &da850_evm_tl_leds_pdata,
8 w! V/ k" K G5 I; q" W .release = led_dev_release,
9 Z% i6 }' I/ h% C6 G& M }2 y0 A. c* ~9 o5 X$ y& S
};7 O3 @3 d6 q ^. x
$ o; H: ?+ ?% V! v% h6 `' l
static int __init led_platform_init(void)! \, e! d8 g# s
{2 c' p3 i ?: ?* E* J
int ret;
0 W' C" |. ]' S: f v2 b#if 00 e/ V: @$ K- i2 G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, ~- [% c3 n! o ~
if (ret)
" i, w7 v8 q% z1 [, d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 w: x+ v' e* H5 E! T
"%d\n", ret);
0 F( e# j# L. X* i* a#endif
9 p4 u& Q, I U' k* ^2 }9 @ ret = platform_device_register(&da850_evm_tl_leds_device);
% x0 N8 i( Q: I6 ?! v if (ret); [7 O, {. v: ~ Y8 I2 i
pr_warning("Could not register som GPIO expander LEDS");0 J& j" L( W5 y& e
else0 `7 S, [( Q' ?- A& z$ K/ T; a, |
printk(KERN_INFO "LED register sucessful!\n");
1 P% }7 p3 ?) I- B5 Y$ ^
! w& a( s- u$ c% o. u+ h* X return ret;6 _/ k. B. V1 S) D6 M) P
}: v: y/ ]& r+ z8 k0 L
( M* O) n& I/ P+ r; ]static void __exit led_platform_exit(void)5 s+ O. R, `# ^/ {2 {) W, m
{; H* @3 b8 A" ]
platform_device_unregister(&da850_evm_tl_leds_device);, ~# {1 z8 }5 E; Z2 ]& `9 g2 c
% h* e7 P. p5 o$ Z% s7 N printk(KERN_INFO "LED unregister!\n");
+ K7 p" |+ d( o6 A}
+ g2 m0 Q. f. `* c P5 m
% M) b6 e, ^0 Xmodule_init(led_platform_init);! h+ Z7 y9 o% ]( C5 _
module_exit(led_platform_exit);
; [. |& ]! c! ]* {
; l k) I$ Z+ n( [: d8 X1 \MODULE_DESCRIPTION("Led platform driver");6 `2 B; y" k( Y7 P
MODULE_AUTHOR("Tronlong");
+ k1 O; l" B8 s, r5 r8 kMODULE_LICENSE("GPL");' K' B. C4 E0 Y3 G1 R( z
: Q/ `8 Y c+ ~0 y4 T( K
|
|