|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" m, n; X, Y9 a [# O& `# v$ \ m#include <linux/init.h>" j$ Z/ J2 z; F/ Q4 _
#include <linux/module.h>
$ T9 u9 I8 {8 x Y#include <linux/kernel.h>$ k1 @, L2 M! O# T& n. |
#include <linux/types.h>& i/ f( P4 g4 c: n) h
#include <linux/gpio.h>
. |% W0 x4 B- z( l4 Y7 J7 ?6 \7 w. [#include <linux/leds.h>
& ]8 b# N! m. Q) T* i#include <linux/platform_device.h>
}2 L7 I* }1 K% `( W0 Y- ^
" `& i' D" M( |. k) E. E( i* s/ Z#include <asm/mach-types.h>
8 i# T2 M ?: n/ O#include <asm/mach/arch.h>
; ?0 @6 a6 e" G/ y#include <mach/da8xx.h>& Q+ B, U4 c/ I: s
#include <mach/mux.h>4 t1 |% j! d8 @* {
5 R; h6 q% H, G6 N8 [/ h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ e3 r9 k! u7 e+ h- |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 [/ a9 r# a1 k; s2 Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( ], k J1 A0 V- K! R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): E$ Y6 E, l Z X( J& v r
7 U4 I6 b+ L6 O; }' H5 o
/* assign the tl som board LED-GPIOs*/+ Z( R0 I0 I% {/ R. {0 k) a: c
static const short da850_evm_tl_user_led_pins[] = {
! G; i4 O- `; w! r3 I q /* These pins are definition at <mach/mux.h> file */
$ G, c- i. h- O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. s& V' I& P6 G! [. W
-1
6 C9 c! V8 h& B! e};
& |# Q6 z# K* X# I, \; t
* O/ R9 e( V1 `: k6 t1 [3 k/ d$ Zstatic struct gpio_led da850_evm_tl_leds[] = {
: j i% B) F3 C* o" o1 d4 k {# C9 U9 E- H0 D
.active_low = 0,
9 X) V" x+ {/ G+ G X' w# c .gpio = DA850_USER_LED0,
4 _+ [3 j4 |3 O1 S( i* p, W .name = "user_led0",
: r0 S- N. B! _ .default_trigger = "default-on",
_3 P" S$ [9 B* Y2 `) Q" b0 f },$ I" i+ N% E7 t& L
{0 f6 u' n) H( O% ^3 G+ C3 T. |
.active_low = 0,& J; c: a8 \* R6 b: T- Q
.gpio = DA850_USER_LED1,
4 D, I! G" T4 l Z: }% i/ _ .name = "user_led1",
5 Q1 X8 V& h3 }* r: K .default_trigger = "default-on",
( N7 S, ]. O2 d6 m },
$ K5 ^7 H- @5 M* O! f; |1 _1 p7 ^; w {1 r& `$ _4 e. P3 N" |! A
.active_low = 0,
6 F: |+ _% x5 |9 |5 |8 ] .gpio = DA850_USER_LED2,8 z2 Q$ g, ~! x1 P- t3 E6 r% J
.name = "user_led2",4 w$ N! F. k( G* i
.default_trigger = "default-on",
: h* ~8 B% k/ e+ e/ T },9 {7 n& B1 l7 ~1 U# k# [
{
# l W1 L7 K7 d+ y @ .active_low = 0,6 k5 P" S3 ^( @0 |/ D
.gpio = DA850_USER_LED3,
- o6 |' e! `; L5 V4 W8 E .name = "user_led3",
" m9 T' m4 x, ~: p0 S .default_trigger = "default-on"," J& q& b. E1 {$ L$ h3 l/ w
},
5 p4 z$ g( F, ?2 F/ a};
: e; l) m8 }+ l+ ?( M# O! m2 z, E C( D* E1 j. \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% Z: b4 u! p( z0 h P .leds = da850_evm_tl_leds,/ ]) T1 P' p$ K6 c O/ P6 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( f: j# h! s3 y2 ]( D* \" _! e3 P+ z1 W
};
+ t; b, s" j' o0 x+ T7 e# n8 N P4 u! y' W" X
static void led_dev_release(struct device *dev)
: W9 f6 N* q- I% V{: [, \) |3 G: K w
};$ R5 Z( s- s f7 K& [/ `
& ~) w0 m8 _* c8 z2 Qstatic struct platform_device da850_evm_tl_leds_device = {
& z5 H& u: W# q$ _/ N .name = "leds-gpio",) ]- L7 ~) [' Y* Q9 G
.id = 1,. \& A# h7 a- Y7 f; s7 `0 v
.dev = {2 [5 `) H7 w3 t ~' y7 A( w
.platform_data = &da850_evm_tl_leds_pdata,: I& k. `) U0 M* [
.release = led_dev_release,6 [9 A7 }' V& ~2 m
}1 [* [5 m# j; {2 c V; @
};2 M% Y( e5 K! K& R$ W1 p& M
! `2 x: [) k8 v5 V4 @" u( o4 {
static int __init led_platform_init(void)/ H" ?! |* N- y# ]" n* \
{0 {* \# r& B) N, r$ _, u! w
int ret;6 _5 u3 [; M# f) l b" ~6 p
#if 0 b9 Q$ d# B" x% R" ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ f! S. X9 a4 j( c6 ` if (ret)
9 c- [. A) t, C$ n l' F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 K- I! [/ p# H& R0 s4 F4 [ "%d\n", ret);
7 N6 d9 m0 i: ^) w#endif* j+ x" S- p( h! J8 g. c0 v/ w
ret = platform_device_register(&da850_evm_tl_leds_device);0 `- t3 j R# B9 T) j5 y
if (ret)4 {4 T' G! R5 e: ^3 `
pr_warning("Could not register som GPIO expander LEDS");& q: q! p0 Z6 ~0 \3 a
else9 o( ?, Y0 Z$ W( e( p/ f+ T
printk(KERN_INFO "LED register sucessful!\n");
: Q+ R0 A, O7 L [% S- I" a' G5 G; e
return ret;
6 r3 B9 P- t3 ^/ i) @}
( e. O* Q* G$ l- {' K) U. T/ _5 Z# _, M5 j- Z6 f
static void __exit led_platform_exit(void): q/ h6 u$ N) ^# D! c
{
" D6 L1 H, g# ]# U% p platform_device_unregister(&da850_evm_tl_leds_device);
/ Q! e* p$ ]3 V/ G; d+ s0 G0 o6 E# t0 E" q
printk(KERN_INFO "LED unregister!\n");: Z U+ B- j* R, v& t( N
}
$ Z, Y- }% N6 ~5 u& U4 |, `: h& k
module_init(led_platform_init);
1 H: G) H. X9 m4 Dmodule_exit(led_platform_exit);
/ l2 u& B6 \3 y7 L/ M$ Y7 Q
q5 C1 F: H) ^2 U2 QMODULE_DESCRIPTION("Led platform driver");
4 D9 X: z4 _8 K- q5 MMODULE_AUTHOR("Tronlong");
d U, d. L( i$ ~ ]1 t" ^MODULE_LICENSE("GPL");
/ Z! {5 H3 @6 B `: c P
' o% a" O9 H/ |" s0 m |
|