|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 w& W- J% [/ v- }: P#include <linux/init.h>
0 }, ? i* ?7 j( [$ ]% k; ^6 I4 n7 x#include <linux/module.h>! K- j$ E- h) O1 v5 c
#include <linux/kernel.h>
: @2 H* }: V) K: z+ g! z" r#include <linux/types.h>
, f* |! {9 | A- l1 ]2 ^8 m#include <linux/gpio.h>
. F3 P1 Z8 z. t6 x/ C8 O: ?#include <linux/leds.h>
5 F2 T0 V ?/ K/ {#include <linux/platform_device.h>( P) }7 ?- N0 R' q6 K5 h
% |6 H8 w" ^+ {! o* v#include <asm/mach-types.h>) p* F; ?: h9 a
#include <asm/mach/arch.h>
) Q" u9 J( T9 A' l7 M( H$ B#include <mach/da8xx.h>% C, a f5 ?/ D; @& S* `% t+ F
#include <mach/mux.h>) `5 r9 L4 W+ O, I; O) w: s+ V
$ E' S, K: V E2 j. c- E6 W! b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ |7 X; }; ~: l3 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' L. e) Y! u$ z/ p' F' Z/ [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 S1 A* P; W9 v3 m! P2 t1 Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 d0 R0 b K) k# k8 X: J( b p+ S0 E% o- L; i/ S" J0 f4 ]. T
/* assign the tl som board LED-GPIOs*/
# l0 W8 D+ x. Ostatic const short da850_evm_tl_user_led_pins[] = {
9 p. y p8 Z% t7 ~ w. D /* These pins are definition at <mach/mux.h> file */
! ] u: X. Q. ?# F1 r9 R, `1 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 J! u& u5 z' Y- _: m) P# ] -1
& ]6 \; f9 [. y2 h( a R5 I};8 q, u B1 d; g/ F$ E8 s3 p5 E7 H/ Q
4 m3 X2 F5 _4 ~- x* N3 @2 | [static struct gpio_led da850_evm_tl_leds[] = {
' ], C4 a D" k; p) v {) n! `1 H" m6 G# ~: A6 f; k* b5 R; H
.active_low = 0,9 S" T4 J! p+ r$ h
.gpio = DA850_USER_LED0,0 A5 Z. F: Y8 K C
.name = "user_led0",
* L+ q) K2 y, G& B0 o7 t7 _ .default_trigger = "default-on",8 e. |4 a: Y4 F5 A% G6 F
},
6 y5 b% o: S* ~2 j {
% u9 J( y# m) l e8 G" M .active_low = 0,
$ i2 g# }9 m; n .gpio = DA850_USER_LED1,
% L2 @0 t5 A0 |$ Y4 L0 e2 l .name = "user_led1",
6 p; A. b; {4 S Z5 A .default_trigger = "default-on",% x9 s& a8 A @) ?' [: }3 Y$ B( J2 n/ @
},
7 x" Y5 [& T- _' Q1 `6 R {% J/ d$ Q! @8 R8 {/ j. q+ N2 {' s
.active_low = 0,
/ n6 ]% V. z. E- ` .gpio = DA850_USER_LED2,. ]( f' ]) n0 l" j: E! P! r/ E
.name = "user_led2",
+ m# M1 b/ B7 i, L7 q .default_trigger = "default-on",
+ \6 j' J! E3 q% z# R9 s8 P/ ? },4 W/ X# L* B& Q% C- w( I5 d
{/ W( F, e3 F/ i' j3 g0 y
.active_low = 0,
! I. z+ s8 t3 r- j .gpio = DA850_USER_LED3,
% A6 P7 o- Q2 ^: r7 c .name = "user_led3",& z% y8 R$ }8 r% {! p8 i9 V) R
.default_trigger = "default-on",- F- t/ }, [. X! _/ Q
},- M4 j- q! |% O8 g
};
$ x& z' {/ S( ?# P O* o" [( O- E7 i& H+ y- V! o# g- d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ d$ `5 _0 G O3 b/ k8 A4 G .leds = da850_evm_tl_leds,
- ^6 F9 R- F2 s9 x$ z+ ]1 B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 Q( C) L1 a/ F1 M% b
};' P: O; H& |, W8 u# ^0 _
3 q6 P! f7 J/ D/ R
static void led_dev_release(struct device *dev)3 \. P. X" S& V/ r, D! o
{
) m2 ^% T8 T: Q# k2 b};
7 n6 h9 y& l$ @# T7 b% _7 x5 `+ ~! Y; h! }
static struct platform_device da850_evm_tl_leds_device = { g, \" n, ]7 ?: W c/ O
.name = "leds-gpio",& Y* ^% K7 V! |+ b) p0 R8 _
.id = 1,
+ q: `2 F. j. m# K& Q7 e6 ?. e .dev = {$ y4 L1 V; {/ r! e2 V5 d
.platform_data = &da850_evm_tl_leds_pdata,
( u% C) S$ \; p( l) s$ W .release = led_dev_release,) H9 Y6 v- |: [" k5 t+ `# f) U
}
3 t/ z. m1 M+ a3 I2 h5 f};+ `& w# u: m& P& Q9 p) ?
; M$ d9 F" X8 w- s% [static int __init led_platform_init(void)
3 v4 d- w6 d/ o% _$ j5 q{
# I' ]0 A X" c; T4 `; z! W int ret;
3 }2 C m& z( R+ s2 Z! R1 p! L#if 0
) B' c4 a) D2 v$ A3 z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% @8 N- L5 E* l; U0 ]. y
if (ret)
* {7 p, |' M3 G* k3 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ @" g( D3 ?; ]8 Y: r "%d\n", ret);% o" P% h; A" Q& M" ]! P
#endif' b/ E$ n% ]: Q1 a& I
ret = platform_device_register(&da850_evm_tl_leds_device); d+ Z+ T* @/ D1 Q) y3 S
if (ret)9 a1 M0 G) s) o4 h/ u) A8 E! ^: c! }$ z
pr_warning("Could not register som GPIO expander LEDS");
+ E2 ]9 X9 m# u1 I else- A" E7 @+ C* o R
printk(KERN_INFO "LED register sucessful!\n");3 [. l% f! f/ x. W( q
* x3 M3 k' g- x return ret;
, S( P: V4 R6 T- W/ t}5 R6 Y$ G# O* y0 A* e4 k
1 g, K) r2 x2 |: L: Sstatic void __exit led_platform_exit(void)
( s* A: o- y8 S{) R6 ~ b, l8 P$ u) Q
platform_device_unregister(&da850_evm_tl_leds_device);
1 f3 e& z# m8 U% O% d9 A8 b0 t7 f1 B( j5 h
printk(KERN_INFO "LED unregister!\n");
! i! o* \) s; A8 e x0 @}
! w# i8 W; h- ~1 X" O* E8 c5 t9 f" K" _
module_init(led_platform_init);, H9 e: L' r5 K# f3 M
module_exit(led_platform_exit);
. d5 E1 q2 p5 u. u# \! K7 u" z0 f9 W7 \1 u! T: A4 ?
MODULE_DESCRIPTION("Led platform driver");0 T* _5 v8 X' v9 p
MODULE_AUTHOR("Tronlong");
) g( A/ M* K* V2 o7 n- jMODULE_LICENSE("GPL");
/ i3 D! T8 b( M2 G. r) H3 N- ^ Y4 o$ P: C4 s
|
|