|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ P9 i6 n& E) y! r+ ^5 g#include <linux/init.h>9 |) H) D& o7 R
#include <linux/module.h>
0 }0 B0 e0 F$ s4 x0 F4 h' k- _ R#include <linux/kernel.h>
2 W F; ^" Z, ?( Y5 K#include <linux/types.h>
! @3 Q) K* G$ E) C' ?! w#include <linux/gpio.h> r1 @' M- r0 C- ]4 u
#include <linux/leds.h>" y2 E+ ~4 |( X! Y
#include <linux/platform_device.h>
- E. n4 P$ C8 Y- c& Z3 N7 k- ~9 s9 f, e+ l7 E
#include <asm/mach-types.h>
8 C1 W+ q+ B1 d' V! W* g# A1 c#include <asm/mach/arch.h>8 t* B# Y0 V; i8 |, D
#include <mach/da8xx.h>& `5 q; B; [: Q6 _+ L% U& h0 e, }! u
#include <mach/mux.h>
' e* J3 P' Z( B4 q, |$ H# ]! n: J1 E1 S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 O" S8 F1 j; e% H$ X8 S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' e1 ?8 S. F/ L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 J% z8 |9 d2 |1 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 \/ G% m1 }9 Z1 x+ F
" b; s8 H! j- h* Y
/* assign the tl som board LED-GPIOs*/
* u' d6 D6 `2 Z6 Q4 a) e6 c& istatic const short da850_evm_tl_user_led_pins[] = {2 X, U3 O1 t6 e8 ]/ K6 }# E
/* These pins are definition at <mach/mux.h> file */
4 C7 m8 I0 B6 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ k0 a6 [, @7 c -1+ X9 |# V4 [4 `% z0 `7 O* G+ b
};& c+ l7 h! K9 k( e! h
) Z0 v" y) U ]1 X' bstatic struct gpio_led da850_evm_tl_leds[] = {+ ^% R2 Z( {: v% N* y1 z4 o
{
7 g" b) f! j/ F .active_low = 0,9 x. z t. ~9 e; f1 d
.gpio = DA850_USER_LED0,
5 {; I/ V& y* @' T .name = "user_led0",+ V& I4 ]; Z+ t* p5 e
.default_trigger = "default-on",4 H0 v4 R: o+ ?- Q8 R. `3 V
},
x$ R3 S9 r5 I {: S' x0 a* h6 G. u/ O
.active_low = 0,
1 A- @* E+ n' [/ t .gpio = DA850_USER_LED1,* K$ W! | r) B) |# K3 o
.name = "user_led1",$ `5 _! C% _ c; W, Z1 h- @
.default_trigger = "default-on",
6 H5 t+ F. c$ T$ d },
' c/ h B* V9 ^4 R {
& b* Y) z: g. l' } .active_low = 0,% U3 N- {, i5 \$ W7 H( Z
.gpio = DA850_USER_LED2,
& V4 h0 W$ G8 N( [9 q .name = "user_led2",
: B/ ]7 z4 i) ~4 k .default_trigger = "default-on",( @1 w1 Y" b. q J( o
},
) z; h5 {' e1 Z& O {
8 K) F' ~" Z, F+ F# K .active_low = 0, u- p- w/ S: m( h# l
.gpio = DA850_USER_LED3,. W: I6 u6 z1 a4 B8 O
.name = "user_led3",9 G2 n& e7 I5 [
.default_trigger = "default-on",
* {( |9 d j# c, |( t },
1 h# c5 A# N9 f5 q4 g- s};9 `4 _. m, k+ W* p) Y4 m
" x) h, t- H7 `. y3 T1 i* Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 U: h. Z9 j# m
.leds = da850_evm_tl_leds,
' A( K' \! @; A8 [+ O% U L: k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 N' d% a/ a' _! O* D# [};8 b: I/ _. f9 I' Y5 E, Y9 U
8 P3 `# r% ^" n1 y! W
static void led_dev_release(struct device *dev)
: R4 |3 o) n' J{
- U5 i# G- V$ [; l};
! _( f* r% m; ] `: h. H* \- F7 d8 }+ z' n. ]
static struct platform_device da850_evm_tl_leds_device = {
& Q' g- [5 l T2 O .name = "leds-gpio",
9 L2 X" Z a( R$ N .id = 1," K5 S; M2 o. m1 R0 h6 p5 }. b: V
.dev = {
- u" p" A/ N/ K! T% W0 f .platform_data = &da850_evm_tl_leds_pdata, w7 H1 e8 c+ [, ^9 E/ l L
.release = led_dev_release,
% t# o3 r) O3 t. c' T3 B }
- D, {! P$ k3 M% E; E$ F) P};( I0 V7 y5 h) t1 ~! B
7 ]% N/ \9 |1 dstatic int __init led_platform_init(void)
( T0 p0 }' u |# ]2 M4 p) s, ]& _% J{
, L3 F+ A, f9 _* k6 _; b- B int ret;
4 ?+ o! p& p6 I1 b: f#if 0
5 d( j: E" O( I' T" Z8 B8 N7 w6 [* m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ h( R+ w6 Q( j5 b- Y
if (ret)
. e/ V2 X: p3 N! ?) M( j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; B: F3 A: d$ s0 e/ D1 P$ }: k8 i
"%d\n", ret);
9 U/ P) G) n; k- \- m#endif& b% l* T4 z% H. z+ `9 n) b& c
ret = platform_device_register(&da850_evm_tl_leds_device);4 \ @ Y3 N+ u O. e4 ^
if (ret)
% r6 B) W! J; F/ n pr_warning("Could not register som GPIO expander LEDS");
* |7 i/ {. C( h, K5 D' [ else
9 ] C1 [" [1 R4 K2 Y printk(KERN_INFO "LED register sucessful!\n");
8 Z; x* l+ I* ^9 J( y5 P2 V9 |3 G3 U. T. e9 ]( k! {
return ret;- p! W1 X" f6 }2 E+ o$ h
}
6 R& m. b- c5 W6 ^6 }& k1 v* e# C B# T: t6 V3 p' ]5 E2 Q* }
static void __exit led_platform_exit(void)2 b8 k7 \; y# M0 q
{
5 d3 I. p' P/ O; j platform_device_unregister(&da850_evm_tl_leds_device);
5 D% [! P4 F/ h( W; M9 k' M4 b* ]# U) Q5 m C" @: a0 L, h( l
printk(KERN_INFO "LED unregister!\n");
+ @/ b5 b; _4 ^) Y" h, W}
/ D# C& o2 s7 g4 d5 F/ S
; V2 i4 Z5 u5 h; l0 l$ mmodule_init(led_platform_init);" S. A4 A( k% \! }* m( R4 v: C& \( z3 V
module_exit(led_platform_exit);
$ ]7 L0 b$ ^- } }9 k2 ^# P; [# F' m0 R, F4 M6 G: u6 k0 b
MODULE_DESCRIPTION("Led platform driver");
4 g( q, J3 B/ z) t! L6 gMODULE_AUTHOR("Tronlong");
, y8 |3 P, f* T) L( f* jMODULE_LICENSE("GPL");
0 e# N, G/ ?! x* p7 `9 l v# s/ O1 Z" M( V: P3 p( S
|
|