|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* E# d, j/ e/ N ]: G3 N8 v
#include <linux/init.h>
7 m6 \ S! p& j# |$ {! x2 H& x# s#include <linux/module.h>' w2 |& @, u6 l
#include <linux/kernel.h>
/ Z8 h3 c: f$ X9 g2 I \#include <linux/types.h>/ k G& t" p. h( U/ A2 E
#include <linux/gpio.h>1 T# k8 t+ J8 y, v! z( `
#include <linux/leds.h>: P8 U% R0 z2 \4 ?" E! v. K; o& c
#include <linux/platform_device.h>( j, n! K$ V* c+ V5 z
0 |7 i5 k: q& H ~#include <asm/mach-types.h>
- v# o$ T- S% D9 L* y( n: N#include <asm/mach/arch.h>
2 f6 T. C8 x7 e6 L5 A#include <mach/da8xx.h>
; H* c# z/ c' S. k#include <mach/mux.h>+ O6 L) S- c" s
1 e( c9 P/ l! O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ P+ O! ^" s* _# Q+ m) V' h5 }# r! I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 a0 ]2 P" X ^' p" d* p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( a+ _* g# v4 d9 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# X$ r4 i& Y( v' w0 _; ~& x
; Y4 B6 x Q; F! H9 D* A; J K
/* assign the tl som board LED-GPIOs*// O3 u/ S3 X; f; U0 c% k
static const short da850_evm_tl_user_led_pins[] = {$ E4 u: K' ]3 q3 j. l# Z
/* These pins are definition at <mach/mux.h> file */
0 J- v, n J# y7 \3 B' w: z6 E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 W0 G3 R+ ~) u0 |! e: [6 S -14 q, t# f; i5 `9 G
};. Z9 a7 \- c- f5 T' k
6 l5 e# v' s z* U7 ]# q* h$ u
static struct gpio_led da850_evm_tl_leds[] = {
9 Q: g( [4 C. a5 ^5 S7 K& U {0 Q, g1 o; p# y* k! n
.active_low = 0,
( I9 N1 I, x8 A. } M/ I .gpio = DA850_USER_LED0," v/ C! y8 g3 T# M' w
.name = "user_led0",
* D. l2 D4 V* C, N .default_trigger = "default-on",
5 [- E# R, {. A ]) t, s+ j1 C },+ x! S0 f8 m) \
{
S- ^# P' u& g( Z. K3 n1 v5 b6 l: @ .active_low = 0,/ C& K' n. o8 H1 G: u& M0 D
.gpio = DA850_USER_LED1,/ K3 H$ ^& I: N5 t- @
.name = "user_led1",8 A* |# b: y" L. j
.default_trigger = "default-on",
- w3 h, I E6 w; n3 S },
7 t* z4 D0 }0 u- q {
+ O: V/ M# k% O, i8 t .active_low = 0,
/ L8 T$ \2 _ P% d% q .gpio = DA850_USER_LED2,
6 V2 b m7 g& \% U6 D .name = "user_led2",+ H3 ~; s/ B, n/ x% k
.default_trigger = "default-on",
; l5 U, ^4 J3 T' k/ W },: z/ A8 H! u& ?9 Z/ x6 `
{
" }% q! f y3 h& { .active_low = 0,6 F. f; O- M; O/ _2 V: \
.gpio = DA850_USER_LED3,
9 ]$ H, [* J4 W1 h .name = "user_led3",
' W# q$ ?* r3 S2 a1 h- c .default_trigger = "default-on",
" f! t. l) D) e8 ?9 U },/ U" |$ f0 {1 L. K, k' J, G
};
. m; y% m( W# T& G$ ^6 r3 J3 H6 D: p2 M5 ]1 B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: U/ V3 Z1 l- L+ E/ b3 j7 u w, @ .leds = da850_evm_tl_leds,: K4 D n! B3 c' |% C3 g$ o0 W' D7 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 |7 M1 [) i- s+ ^ ^};
& }& A3 g6 t ~$ p' S: C& K
" C& S7 A4 E" x2 `+ r; estatic void led_dev_release(struct device *dev)( k: X7 V& B S8 F! {
{
+ o6 Q9 P2 Y8 l Y+ S7 p. W};
( r9 \# E% F' ?* x7 v6 ~4 K- p
static struct platform_device da850_evm_tl_leds_device = {5 q; k0 j; Q7 e3 l+ \& y
.name = "leds-gpio",, l! B+ e2 w/ S+ o! \
.id = 1,7 k# Z" N3 z& c8 O9 v9 H" c" ~2 y
.dev = {
2 T; I+ g' L% ~$ f9 j5 z$ y$ k0 f .platform_data = &da850_evm_tl_leds_pdata,
) j' K1 T( b5 U: n' I4 [ .release = led_dev_release,' i5 j; `$ e' s _8 U7 o$ x) U
}0 O9 L7 g* y: p( ~5 n
};
9 r$ f( G$ s$ v+ r
8 Y# f4 E5 y% e3 Z( gstatic int __init led_platform_init(void)7 O3 l5 I* ~' }, E% G+ |
{: s" w0 q- R3 L- X; P" p
int ret;2 p/ N7 l, Z. ]. U; F
#if 02 v7 b0 j A1 S3 B4 m' O9 p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* n3 {+ _2 ?: x0 V
if (ret)3 N" A: R L% Q$ L; A% ?7 L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") D5 P# z% @- n; Y6 o# f/ m7 B
"%d\n", ret);
8 N7 S# [' k/ m0 Y' ?; U#endif6 }, {* [; A, X- h! L# |
ret = platform_device_register(&da850_evm_tl_leds_device);
+ {/ W; w) ]# D! m" m/ U if (ret)
. Y) }% y+ `1 \1 }/ z pr_warning("Could not register som GPIO expander LEDS");0 L2 I8 \$ f! z3 u
else- Z0 A) n6 V6 b$ Q8 H# V6 {
printk(KERN_INFO "LED register sucessful!\n");' Q+ l5 E: R1 o1 n! r9 K- L
5 S! p8 J8 d2 p- l8 J& I7 M' x' ? return ret;
. k5 D. C- ?0 u3 s}
2 n. q* |( d0 p) {
( I3 W3 n7 K$ @static void __exit led_platform_exit(void)
; T' _+ v: v3 v' m, k/ K8 A{
. ]% M u% H- W6 j& p5 A$ I platform_device_unregister(&da850_evm_tl_leds_device);
/ |4 r0 l" b/ m$ a1 w/ q
! G/ W7 X" }! w7 L- t) i1 I) ] printk(KERN_INFO "LED unregister!\n");
# ^6 Q& Q. i3 ^3 a}
. j4 x# q- k; F7 k2 o5 ~8 z
# b! g3 }) O, _module_init(led_platform_init);$ Z \( q; J) U
module_exit(led_platform_exit);
1 Q3 ]* f$ G/ b6 h) n0 K A- h" J% i$ o/ [
MODULE_DESCRIPTION("Led platform driver");( T; g# F2 o; Y. W* F
MODULE_AUTHOR("Tronlong");
5 C( {; R$ H2 x( T8 wMODULE_LICENSE("GPL");" Y. V1 J% _7 P4 t$ @
; I" u" }" v8 ^
|
|