|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 r% _0 g: B9 M# L5 D8 Y; g1 z#include <linux/init.h>
) }& s/ u' \8 A2 Y3 g#include <linux/module.h>
4 u6 a; r% s5 E#include <linux/kernel.h>1 O- }9 A5 ~" T; J! a3 ~/ q
#include <linux/types.h>! {6 L$ s" a% p0 s: \/ M4 o' i, n
#include <linux/gpio.h>
& p' n6 A! L! ~" t2 E' a! v+ p6 @#include <linux/leds.h>
U" r" v3 [' I% T$ g. y* a#include <linux/platform_device.h>
* _: i8 [/ M N9 W8 g
[& b7 K4 S1 z3 [$ }2 t" L2 ~' q* W#include <asm/mach-types.h> F) W- \) H" O5 c p; Y
#include <asm/mach/arch.h>
! q( a8 Y# I; ]" {#include <mach/da8xx.h>
4 {; Q8 F( U+ Q4 }& d#include <mach/mux.h>
5 q H4 U' i# w* J
4 W( `& L" ^* p7 o9 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 H# O. ~$ H, r1 Q; `) V) J3 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( {5 c$ V) U# A0 B. \" C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 s* i: ?6 B6 q) R- O; I2 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 ]) s; U. z* ?' s0 Z
7 n3 C% `4 m4 V( U5 W
/* assign the tl som board LED-GPIOs*// }% }( F- h$ I
static const short da850_evm_tl_user_led_pins[] = {
( y: {% K/ ?+ K( { /* These pins are definition at <mach/mux.h> file */ K0 i+ e1 E1 i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( S% F1 v) |- ~8 D8 C% e0 B3 }1 p
-10 W! r# T* s+ l* j
};
/ ?& x' {9 U# y4 K- ^3 j
) |3 i, q; w9 @9 Istatic struct gpio_led da850_evm_tl_leds[] = {
7 |; U o0 \ D1 X- E { N9 n. B' {1 r3 @1 B# f
.active_low = 0,! |# U# }& x/ A+ V
.gpio = DA850_USER_LED0,, v& M* N" I Z \
.name = "user_led0",+ ~* b# k9 i6 J
.default_trigger = "default-on",
* j# U" \! b4 k/ X1 R2 K$ y) e },
# b8 F( H' {+ L% i1 u { Z+ K$ H8 D& g/ i( w; }
.active_low = 0,0 F/ [% a+ l: @) q/ Q2 K7 J9 h
.gpio = DA850_USER_LED1,* O$ b% c- R: V5 C
.name = "user_led1",) y% L% Q0 M7 V9 i4 g
.default_trigger = "default-on",, C4 v4 ~7 A* S, ]
},
: D3 p6 S1 j) u6 L {+ n, c0 P! G7 F! q9 z9 o
.active_low = 0,
6 D# G; e) \1 {* N .gpio = DA850_USER_LED2,
5 e# j; J) _# a5 q .name = "user_led2",; D/ W) {- w5 h! F
.default_trigger = "default-on",. E3 O" [6 j7 v! V+ C! n# Q
},/ Z5 [' L4 I$ c
{# D& X, R# @7 D4 f9 I
.active_low = 0,3 K2 _) Z5 g0 a8 X) F+ o8 F& g; C3 y+ o
.gpio = DA850_USER_LED3,+ F6 B: n8 l3 c
.name = "user_led3",
% T& h3 A& W+ [0 ]) C; {4 y9 j .default_trigger = "default-on",/ @# p/ i& [( f4 d {& `
}," u2 o6 E0 v/ z2 @; ?( t( z1 C: z) M
};
6 F4 s7 P9 |* v; O! U! C( P
/ g9 D0 H4 Z6 l2 Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ s# L2 [- U8 X( b1 {( J
.leds = da850_evm_tl_leds,' I, ^6 ?) r0 C+ b5 m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, y" @0 E+ l1 H& E};. ]- R+ p4 P3 @) ^0 Q9 @
: G" e& z+ `4 Istatic void led_dev_release(struct device *dev)
) f. O6 v+ z; E7 ^' m; k{7 T7 w1 D$ b0 a( X5 E- u
};
3 `, z* y$ u$ J3 X
. o3 @$ } @/ H1 Z2 }; n% [static struct platform_device da850_evm_tl_leds_device = {; b. B# o' _$ e7 A; a
.name = "leds-gpio",1 ]) l% Y/ Q4 I3 d$ |1 f8 ^
.id = 1,' w) `0 W! U# x8 D0 [
.dev = {5 {$ d! r) U$ H: N$ i
.platform_data = &da850_evm_tl_leds_pdata,% B7 g! q2 C3 p! _1 d( B
.release = led_dev_release,( q6 q8 @& Z# U0 P( ?1 `1 c0 D2 B
}4 c4 S- ^4 S8 \( w3 T
};
* `- B) v i3 A4 ]+ l I! p
" Z) n5 w+ M# Q( fstatic int __init led_platform_init(void). \3 ]7 ~6 P( B7 \# q
{1 {9 T( l9 |0 ^" W/ b' i/ g# _
int ret;" x+ ]% N, j9 h6 |& V1 N
#if 0
* a. l0 _: x5 x2 E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- P O, M, I2 m* J- G: V
if (ret)
$ g8 i! t$ H, p, Y' Q) h0 V2 ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& Y! ~ k0 K0 R' k1 [ "%d\n", ret); C. u9 z; i8 u2 z; H
#endif; S1 f1 K( ~5 O( K, b2 ^, [
ret = platform_device_register(&da850_evm_tl_leds_device);$ F$ {6 }1 ~1 p/ h6 k2 g
if (ret)
' B7 F4 ?7 a* S4 \$ f4 m& s pr_warning("Could not register som GPIO expander LEDS");' k7 p& n7 k ? \
else
9 I1 q9 D1 P8 @0 Z3 w printk(KERN_INFO "LED register sucessful!\n");
/ e" P" N# K' ?4 F7 a% X. E. y( X; _ W) q" v& u! R
return ret;
9 R% O+ b! a, j- P j}
8 W" l2 g, Z$ [# [* `% P; v! o g# d
" S$ y* I: r# n- J$ Pstatic void __exit led_platform_exit(void)
& U: O( u: c% }- e$ R6 U: \, U* S{/ i& A7 D4 d b! t, Y
platform_device_unregister(&da850_evm_tl_leds_device);
8 e, C- V: C2 N& I6 A. M6 s# s: J/ c; h- h6 f9 m
printk(KERN_INFO "LED unregister!\n");
) e9 \% I3 G9 h* n6 n% N}
" z+ c" r/ q5 B4 L4 y, e/ W1 o' e. w( q% Z+ }; s
module_init(led_platform_init);
2 D. ]( Z9 P0 v! ]. Dmodule_exit(led_platform_exit);
% }" u" W3 b# W( M8 z5 [. s( S! `) s9 |" `' b& A9 _0 I$ a. F
MODULE_DESCRIPTION("Led platform driver");
7 a; a: {& g; F( \9 S8 y- IMODULE_AUTHOR("Tronlong");' O* A* o m% ^# Y
MODULE_LICENSE("GPL");
Y' `1 K* ` ]
$ t1 }4 M1 [& z0 a! P& v: o |
|