|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& o, n4 u2 g" Y. T2 [
#include <linux/init.h>
" o% E- ?, k9 d( T& j! ?#include <linux/module.h>' A% t& T& X- o0 {* v! P
#include <linux/kernel.h>7 K0 U- \: t7 ]" ?6 d
#include <linux/types.h>
% D" C9 J7 c" d( b1 l8 E#include <linux/gpio.h>& g8 x6 O# k4 z, C \
#include <linux/leds.h>8 c) w4 Q2 e1 M2 d
#include <linux/platform_device.h>
* ]- \0 Z" U3 ^+ c$ [
7 l6 o8 X0 Q$ I& t#include <asm/mach-types.h>
- c5 k' [4 I1 Q#include <asm/mach/arch.h>! X9 s8 [# J& y9 d
#include <mach/da8xx.h>
h- J1 l8 B" ?) O7 t#include <mach/mux.h>- f) S) V$ @" ?+ l& I
/ V6 U/ a+ H/ V( C# T3 P& x4 L3 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* {& O' I$ O% l( W0 }( s
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 s6 N6 I0 r- |0 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 n4 q& Q5 x; j4 l) E1 K0 O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 ]2 F' X6 O, W5 ]0 B% o4 q
4 ^. ^/ o) C8 n g9 e; [
/* assign the tl som board LED-GPIOs*/
3 u9 R" s0 g, M" {- p; zstatic const short da850_evm_tl_user_led_pins[] = {
+ U: ?: k' i7 M/ f6 ^) ]+ m- d /* These pins are definition at <mach/mux.h> file */
3 N& F& R& b1 h! p0 T+ F% o6 v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) ?6 T8 G0 f$ o; P {: |, Z7 F" i
-1
0 I: l5 L9 ~' \};) n: o, ?2 ?0 o3 g F1 v
. J) e( V3 i$ G7 Z
static struct gpio_led da850_evm_tl_leds[] = {
8 [4 @& [7 d) I2 _6 Y) t {
8 I/ n% D: _) ?; F9 f4 X3 M .active_low = 0,
, W0 s1 k% o3 A .gpio = DA850_USER_LED0,
" g- C6 w; H( q* m .name = "user_led0",0 _# \8 [( g4 `( h+ N' S$ i! J5 d0 T
.default_trigger = "default-on",
: M) o: W2 Y+ S. j9 F) r* f3 C) S },% M7 u6 R* ^. e/ y' p' O
{
3 {; ? j/ R3 k% H- B .active_low = 0,' W' l# s, @( _( J0 p3 P7 H# [
.gpio = DA850_USER_LED1,
, V) _3 e2 L* `7 ]1 _ .name = "user_led1",
6 e& K, t. R: D% A .default_trigger = "default-on",
% p# r# `& k- q) m },+ I7 d# o# d( y$ `% f
{
# i4 n; s; |1 U6 a4 T' U .active_low = 0,9 ? z9 A* n" M
.gpio = DA850_USER_LED2,$ ]# }. _$ ^4 j6 i1 P
.name = "user_led2",
' D8 N' i. U8 p5 K" b# f, B .default_trigger = "default-on",3 V: _- J6 _- B: @' ?
}, v: ]( ^; |1 l' @5 B% m& j
{& v6 e, j7 M- O5 {# C; H S6 l9 q4 t: v+ g
.active_low = 0,& O6 j1 a1 y3 _1 a- e% ?/ H
.gpio = DA850_USER_LED3,
& m+ b: ]% e4 x8 \8 m+ u. d: n4 Z .name = "user_led3",
3 z' ?# q' \/ Q) j0 y. G2 G .default_trigger = "default-on",
4 J0 r8 \ y! [ },+ j1 G0 E( }; V% R
};& U6 V% p1 e5 ~8 W0 p, T. Y6 q
7 P( Y" O$ v" {; K* m8 T- D0 gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 k P: |* g T+ P; ]; q .leds = da850_evm_tl_leds,
: e' H+ y; p/ b/ N% j1 g% \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 i2 v2 K' y! C6 G" T. ]4 ]};
, }5 `% V+ R4 }( y% d( f1 o4 k+ t
8 K& @* l8 c6 S/ ustatic void led_dev_release(struct device *dev)
' u3 `1 J5 ]; }- k& `{; b0 {0 {1 Z% k1 }. |2 O2 \0 p3 b, _
};
8 ?: @ @; Q) d1 e9 u
) D. r& E- |' ?5 u- H5 Tstatic struct platform_device da850_evm_tl_leds_device = {0 |- i: d: k( @6 d- U% n' E5 Q
.name = "leds-gpio",3 ], U, m* w& c" q% X, @" n8 U
.id = 1,
m# `/ L5 P3 k( L& H! ?0 D .dev = {
" J6 x" `+ ^! {' ?$ ` .platform_data = &da850_evm_tl_leds_pdata,
j& o& z6 y h$ t8 {4 X" Z .release = led_dev_release,
: a; n" k C4 O& w }4 R' K8 y/ t" F% U+ y
};, d0 A3 I/ u" D! C! M
+ {( U. h/ B4 k2 I+ `& ~static int __init led_platform_init(void)3 n% l. f- A3 P$ X
{
# ^; d% q( J* ?( a6 _ int ret;
$ i, ^' ] Q! q#if 0 m7 W5 T1 E0 s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ R- \$ Z( E+ [4 i2 @( ^; w# V; S
if (ret)
% o! _! B8 {: b, | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* I* `2 B" i! Z
"%d\n", ret);: A+ ]8 S/ @4 Z! [! D# e. |
#endif
. z8 z; W) j4 O! ? ret = platform_device_register(&da850_evm_tl_leds_device);
, b' P) ?" T3 |0 v if (ret)3 V) i3 G$ W( i* v6 q
pr_warning("Could not register som GPIO expander LEDS");. M T$ Q* `7 X, [7 j( h, A
else, ^# u b1 ~) ?) M
printk(KERN_INFO "LED register sucessful!\n");
& ^) \+ x" N e9 _
5 A5 G- _8 I0 H: k4 }9 J; X return ret;4 X9 Y9 R! U7 x* p2 ]# t
}$ J6 D4 Q" Q) A4 v; ^4 D
T r* w, D3 p9 L: _# I; }5 f' ustatic void __exit led_platform_exit(void)
8 Z" \4 s7 l; P" x{6 F7 H) j3 H. d. O# ^/ K- Y
platform_device_unregister(&da850_evm_tl_leds_device);! j5 B+ [! v- j4 `( m
# j2 r5 U2 n+ _* m" K# y printk(KERN_INFO "LED unregister!\n");
& {1 D3 G' v# {3 _0 e' I9 G}
8 B9 K; X: }1 f# u! w3 e" l& f. f3 X! B
module_init(led_platform_init);
( h& P9 Q7 R. X4 Nmodule_exit(led_platform_exit);
. k- {; Q! G5 `( ~1 l# Y2 K3 I( s0 h% m7 y8 U, m
MODULE_DESCRIPTION("Led platform driver");
! L4 o8 g2 f6 J. D2 B% `+ g# }MODULE_AUTHOR("Tronlong");
; M: V/ G0 P! d$ ]4 X5 KMODULE_LICENSE("GPL");1 Q( {2 C* g% n( h7 R
: ^) c1 B$ }2 B
|
|