|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) d5 F+ k9 y, O) x6 F- F
#include <linux/init.h>
8 i# `( A( X# ?; p" o$ k#include <linux/module.h>
: u9 |' x+ P( y5 z# {#include <linux/kernel.h>
! [( a/ A1 X. p5 Q#include <linux/types.h>6 j+ s7 v0 Z* U; [/ R+ Y
#include <linux/gpio.h>
+ V0 C4 U9 I7 K5 O8 B% E#include <linux/leds.h> M/ [: L0 j% v6 D4 d9 M4 Q% P
#include <linux/platform_device.h>6 j$ m( G$ @" a. H }8 s [- G, u
' U7 t N# k0 d+ F0 {/ p5 m& ~#include <asm/mach-types.h>
8 a$ C) [ a3 a* ? ]2 H2 W#include <asm/mach/arch.h>
, |! }" O; E, S" Y" L" W, I" g#include <mach/da8xx.h>0 h5 e, v' F6 T$ N+ R: L- L$ ~3 }
#include <mach/mux.h>$ [7 X* S% b: H% U9 Z
: A8 S- C. o& [9 e W! q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! e* Z' i2 F& b3 D& d% z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); J4 K. @ N) |5 B! y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 A7 U: K/ M5 ?% ]; \( g: M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): x) A9 F i* p/ D8 A
/ N( G1 H1 d+ M$ d, [2 h# K. W/* assign the tl som board LED-GPIOs*/
6 M+ b+ }# ~" z, g9 h8 wstatic const short da850_evm_tl_user_led_pins[] = {
) ~% g9 A$ S* g0 H3 m5 t5 E. h /* These pins are definition at <mach/mux.h> file */
/ h z' o( z% [) y+ s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 O! q% J: J3 v! R0 ^& @4 @ -1
5 E. P* m: ]. U* q};
0 b+ J* B! g C" i! t, ?
1 C2 `0 K4 S0 e: h* ]# Z4 k& Z( }static struct gpio_led da850_evm_tl_leds[] = {; f* w5 s f4 @0 w- q1 O. P, {
{
9 m# j. W2 Z0 q3 v. r: s .active_low = 0,, D, z6 `6 u' w) K" V W
.gpio = DA850_USER_LED0,! @/ w/ a4 S; ?: Z: m+ P8 g
.name = "user_led0",
X$ Y+ ~9 y/ }7 G9 }9 h .default_trigger = "default-on",
) u/ p7 f+ b9 R; z8 U },
5 i" \9 `$ Q: c {! d' x4 b, f4 [9 ~ G
.active_low = 0,9 D& o4 c: ~# k: E, y! l
.gpio = DA850_USER_LED1,
3 P5 c9 _/ W( V! K: k* A .name = "user_led1",
3 n g6 P4 `5 n9 z .default_trigger = "default-on",; p3 k# q" ]) b& q+ K
},
: _; T7 Q; C j% a4 X3 t! J {# ^6 E( ?. a; b. R) A
.active_low = 0,0 Y6 D4 Z* \7 P" F
.gpio = DA850_USER_LED2,0 w+ D& i: l7 \6 W2 _5 p
.name = "user_led2",
: m/ z! l2 J0 ? m .default_trigger = "default-on",
& |" m6 U$ C* Y' E },0 v+ u, V) Z" _: U6 F
{8 a/ A. l. D2 h7 k
.active_low = 0,8 n0 H/ s1 k# \. l6 [
.gpio = DA850_USER_LED3,
- {/ U6 `; `( `5 U% `4 Q; }2 s" N .name = "user_led3",
0 h6 E2 E0 u) T- f. K% E .default_trigger = "default-on",
p/ i/ u6 `3 M7 a3 ] },8 K# A! e: J. m
}; r6 V( i; f6 L, Z8 N+ g
# u c: j3 U. }9 z* n* w5 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 p2 D) I# a5 M9 h5 z/ v W .leds = da850_evm_tl_leds,
2 Y: ?1 V9 v& m9 k) b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ h1 L( e3 l5 w5 T: b0 P, C* l
};
7 ^. e/ j2 _8 z. Q/ A5 [3 R
* i% R: ]6 a1 ?9 ]static void led_dev_release(struct device *dev)& A$ f5 W( e4 e& `# {2 {( M
{
R$ r0 W# X+ T% o, V) q: l};) j' f% c, l+ j
" ?' r9 j L6 Q; G# W3 G9 P: S! i
static struct platform_device da850_evm_tl_leds_device = {
- L$ w x# Y5 U& q .name = "leds-gpio",. |9 T: H5 ~5 T0 O. b
.id = 1,
; C) c3 J0 e6 i. z$ ` .dev = {
( a/ B, {3 M! G# J; ?% C .platform_data = &da850_evm_tl_leds_pdata,
& t! j# Q7 t1 D+ J: R .release = led_dev_release,
# N+ F0 q) B* b* m }5 ?8 s: m, v; N' I2 O$ J
};
, V7 f$ s& Q2 Y
5 B2 W* A$ o9 h; Sstatic int __init led_platform_init(void)
# r Y! q! P- W% n5 Q{+ j# w. ^. L" v) H' Z! |7 `# Z: M
int ret;
7 G4 t; ^0 f, j+ ?# w" J4 J#if 0
: T/ v9 P2 |* y4 m! @. T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 \ d3 W( y3 Q if (ret)5 V9 ?* f6 @6 b! W: M* ?. E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& X; J. r; V# T( a( N" |5 F* p
"%d\n", ret);- X! c) \- P& _ V
#endif
4 [- _" V* u* b' H2 u3 w% M ret = platform_device_register(&da850_evm_tl_leds_device);3 h4 ^9 }% D, n$ d& m/ W7 v0 I
if (ret)( e# g9 ?0 W( U+ ^' j7 X. P
pr_warning("Could not register som GPIO expander LEDS");3 t$ R _ w( I" D. j
else
( [. M) r8 _. N h& I: n9 V printk(KERN_INFO "LED register sucessful!\n");& `+ F t9 n1 d& e3 _# k) }/ `/ F7 N
: m$ F; @* o, V return ret;5 ?3 `% G, \0 Q3 p, c1 ~$ `, g) u* S
}6 B, K9 f% c8 U* ~
5 F+ {8 ]( v+ _4 Y+ v9 gstatic void __exit led_platform_exit(void)
) B2 l" h6 R* H: H' d{
: O& M5 W2 ?( J- }2 f) q9 f platform_device_unregister(&da850_evm_tl_leds_device);6 l4 [0 O% H/ ^4 G6 u
0 S, h0 X1 o! {$ }
printk(KERN_INFO "LED unregister!\n");
9 Y% b" P, Q b. K1 U& j9 e3 B}
- K# f% G8 M7 V, e
- T$ S6 i0 _7 X/ }1 W- @% L5 ?module_init(led_platform_init);1 P2 L# \5 E/ h! }
module_exit(led_platform_exit);
( m2 J4 |3 m& {5 P& |8 E9 l' M U* z, Z9 ^5 q6 i
MODULE_DESCRIPTION("Led platform driver");/ N Y4 S$ Q, d; x/ I* H( S
MODULE_AUTHOR("Tronlong");
1 Y$ v' w0 U" N* m4 y% VMODULE_LICENSE("GPL");( o& v6 R4 l+ {" A8 I4 w
/ S3 B/ G0 U6 G$ b9 l- H$ \ |
|