|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 |/ S( V4 i# R$ i! g9 I
#include <linux/init.h>
4 O# S0 a& C( s/ ?. j, H% l; F#include <linux/module.h>+ [4 G8 H) h" a: `
#include <linux/kernel.h>& f: q: Y3 s/ \) B5 ?
#include <linux/types.h>
% R" x8 |# h1 [& c# p#include <linux/gpio.h>
+ M& O1 W# f% G* n1 J#include <linux/leds.h>
3 e! R; y6 w8 F# r6 Y: e#include <linux/platform_device.h>
2 d" G& o, X% r7 J b
4 o/ ^0 M O/ \1 d8 k#include <asm/mach-types.h>
( `: {7 j$ ^( U$ n+ r$ a#include <asm/mach/arch.h>
* N, H& ?& z- o; q7 k+ r! F#include <mach/da8xx.h>
+ _% t0 a G$ w, P: R#include <mach/mux.h>
2 D; f2 n1 H p3 m- c4 o" W
) \1 }' V3 ^& B4 ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- K0 }0 ^, h+ I0 }/ k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) W n. X# B3 |5 p1 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% v) P) d1 L5 P2 B- s: `# q( q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 V$ a, q8 A/ W, c% i" y# V* G n4 t" g' _, [; s
/* assign the tl som board LED-GPIOs*/
# p V2 Y. i9 E6 G" X& `2 D" Ystatic const short da850_evm_tl_user_led_pins[] = {$ z8 O6 y7 M- L- D5 j
/* These pins are definition at <mach/mux.h> file */# j2 n7 t* ?; w1 n. v: t$ v5 T# q& U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
w4 z3 `3 p g7 Y- B1 y -1. Y4 y b- d$ u
};2 \& {/ n/ D' A2 l; v2 s: _( k/ Y
) v5 M# Q/ |5 I; H& B5 Hstatic struct gpio_led da850_evm_tl_leds[] = {- L d& \5 i! G/ K
{
$ D, s6 M* p: u& ^: l .active_low = 0,
$ ^6 x& m/ m, i3 b6 } .gpio = DA850_USER_LED0,8 M6 O8 q4 h. e' ], f' j
.name = "user_led0",! C7 g* m% o8 e* V
.default_trigger = "default-on",# D8 I( m' w4 g+ x; X& C) c
},
) P7 U' h3 E7 ~7 V {
; t! f' ~# I% _' Z8 f .active_low = 0," V$ ?0 C* R' F: P" E* u
.gpio = DA850_USER_LED1,
+ O, c1 q2 U9 [ .name = "user_led1",
. m& x# p6 a3 }) Z/ B+ H* q+ R .default_trigger = "default-on",0 c: K" X" L+ e# a" Q1 c: z
},) S$ K- d0 K, K1 T6 p5 Q, }
{% ?6 v( u! Z/ ~- e0 I! E
.active_low = 0,
' y! k$ z( D0 I R6 l; _ .gpio = DA850_USER_LED2,8 Q( l" R) o- J1 Q# E( ?* I6 u
.name = "user_led2",) A7 B4 N1 L% b8 a& v
.default_trigger = "default-on",
, S6 M' j+ D4 t$ E, J8 Y& ^0 R },5 e' y+ y+ A5 x( t# K
{' t( V N" ~, i" p8 r/ w7 E/ Y6 R5 T
.active_low = 0,4 S# G; i1 P7 { M* o
.gpio = DA850_USER_LED3,6 P& K; H5 x1 L- p; w |2 v
.name = "user_led3",: B: [. I9 G& Z! A
.default_trigger = "default-on",/ w0 i! r4 S! {0 C- ~- v0 E4 X
},& E; z$ @4 e- U
};
1 I, W/ V( p" q" r$ K! c) I# [& o+ \6 Q0 W4 b2 Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- ^6 d# ]) R/ X, D .leds = da850_evm_tl_leds,
' r3 J% Y! W- z: \- ] a .num_leds = ARRAY_SIZE(da850_evm_tl_leds), D9 ?' N/ \/ M
};
1 {7 V: }- A; ~% _* M8 \. N$ p. P1 E" J3 r9 F
static void led_dev_release(struct device *dev)/ E/ R9 x6 k; c; T
{" p6 M) f1 e! b- C) s
};3 h5 f1 i( m/ ]
3 _- H4 X6 w0 l7 {- l) a
static struct platform_device da850_evm_tl_leds_device = {# u% x4 m/ m* p/ G' ]9 I, }5 f
.name = "leds-gpio",' S* a. d* W" i
.id = 1,
: x- Q, m; u( f .dev = {
& l# k; W+ M8 g) q/ I# @" m .platform_data = &da850_evm_tl_leds_pdata,
e% |6 C/ E; g2 R0 l .release = led_dev_release,
% j3 e( L5 m4 u1 |' v }* |! u+ U0 E; J! K* G
};8 j% `( L! p0 }
; u/ [, C& l5 v# E! T' Qstatic int __init led_platform_init(void)2 ~, q6 ^1 ~: |
{
4 j5 s6 E8 l7 V' g5 G; Z int ret;4 @4 C% q3 K; _% G- z, ?
#if 0) K3 }! c8 W/ Q6 ^" i8 k2 @; S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) d% R1 D/ S# ~# `- A if (ret)
! S" q! ^' t; B: ]+ x6 I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 m% C$ r8 g6 F1 k/ ?* E# U "%d\n", ret);1 }; L! Z7 d, c. e/ W G& B
#endif0 i: j! m, w! m7 g% m3 n& }
ret = platform_device_register(&da850_evm_tl_leds_device);! R' L+ A+ c) w+ W( D% |* _
if (ret)
& G8 c9 V/ g& s/ u& f pr_warning("Could not register som GPIO expander LEDS");
; R3 P1 Y- I3 R- v$ c9 C8 S* Y else& q* [" G/ W; N
printk(KERN_INFO "LED register sucessful!\n");* O5 P" {% m. C9 n$ Z; a1 \% O
+ [' k" Y; x: \& y return ret;8 u; W; A8 }6 \/ h
}
" S+ f( M8 |: D3 n" V1 X' M
* s; D( T" [& tstatic void __exit led_platform_exit(void)0 }) x q$ }; d4 d l0 T: I
{4 r; V! F9 c! K2 W
platform_device_unregister(&da850_evm_tl_leds_device);
, }; o6 F5 Q2 f* l9 l& e9 A2 U6 S5 E. U/ p
printk(KERN_INFO "LED unregister!\n");
6 ^, X$ S1 m' a}
5 C5 W3 y$ g+ |0 B* i8 e5 b
, C9 X& q: S, \3 N# }module_init(led_platform_init);3 |9 G. S; F" g$ W: Y; e4 [6 m4 l
module_exit(led_platform_exit);
5 F# W- ]# ^4 D; o# k" m& U" G1 ]$ F
MODULE_DESCRIPTION("Led platform driver");
8 _ Z+ z: P% E6 v& ^MODULE_AUTHOR("Tronlong");
6 t: p$ s1 J3 \) ?9 G5 XMODULE_LICENSE("GPL");/ i' j! ~1 O* ^3 Y$ F0 x1 _# j
, f) P. f" @; n+ k9 C% u# r
|
|