|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 O% y, O0 o5 I+ @/ E
#include <linux/init.h>2 b+ x! w1 ?2 ?8 A
#include <linux/module.h>
( y, N) I. i( C( j* u% A#include <linux/kernel.h>$ G1 G! O2 v; y5 ~4 D
#include <linux/types.h>
9 I3 @; R! n! I6 Q2 z! @' e#include <linux/gpio.h>
, n i/ j3 l; {6 E9 B5 a, \3 p#include <linux/leds.h>' T3 L; h7 z) r6 Q/ {: ~
#include <linux/platform_device.h>; I/ M% Y8 r- O+ X
# S4 w6 S2 p- O" E#include <asm/mach-types.h>
9 \ z0 \# \5 H5 p#include <asm/mach/arch.h>
) i9 m3 G+ U/ B: {2 M& R# @#include <mach/da8xx.h>4 S& r2 S& c+ v( _5 e6 y2 n
#include <mach/mux.h>
6 D* p- a5 e7 p2 G) x" j- @& l8 t2 E) Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 q! a8 v" ]: a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 K8 X3 T- V- B" @- u( F. ]# R0 n: ~: ?/ ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 S9 m) Z! G( d$ k" Y$ U$ U/ U#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), t( N$ K; l1 A! Z2 Q
7 N3 h' j3 R4 @- e; m/* assign the tl som board LED-GPIOs*/5 I4 _! K8 U$ [! H4 J' e$ R4 a9 e
static const short da850_evm_tl_user_led_pins[] = {
7 N/ L1 Q% c% `% o /* These pins are definition at <mach/mux.h> file */
. J; m: l4 n9 b: g7 Q3 S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, k$ s1 f; y/ M% D2 m+ o7 B0 v
-1
* p9 ]$ O& v! G! a2 ?5 g4 C};
0 }+ O! o8 D& _- S9 L, a
0 ^# g# m3 X4 t. e& Estatic struct gpio_led da850_evm_tl_leds[] = {! k, O) t5 \! K$ q5 f8 b }
{0 t! ~+ s+ Z4 C0 X
.active_low = 0,
! q5 }1 b5 X7 ]2 \5 G .gpio = DA850_USER_LED0,: b9 B2 Y; R% u$ o
.name = "user_led0",
/ F$ H. G+ c1 h .default_trigger = "default-on",' m* ?" H/ B! w- N! T5 \* n/ _
},9 `1 m8 Q" U) w! M
{
( i. E: p4 ?/ e8 W" ]! a% W x .active_low = 0,, c# |( t- Y; g
.gpio = DA850_USER_LED1,
3 m5 \0 E+ K% t/ `' @- s4 U .name = "user_led1",
) r) q' ]1 ~4 ~ .default_trigger = "default-on",1 h% q' O& K, e2 i Q. ~
},
& d6 f1 R# T- L! ?) A" b {
, C" t8 [* P: `1 {( v5 m5 v .active_low = 0,
6 z( @, E, u9 R# |! T* j& |! L .gpio = DA850_USER_LED2,
) Y# ~! s. @4 [" x, D .name = "user_led2",
+ Y& n" z/ ?! q. l4 T .default_trigger = "default-on",: _3 i7 [& l2 Z5 p
},( p; T& \0 E; d/ F8 Z9 R7 m" L
{. V+ f" x4 S v5 W
.active_low = 0,9 F* p* p- \7 N- k+ O/ J! ?
.gpio = DA850_USER_LED3,
0 L6 V$ F! S. X8 |2 X5 i/ p! Z .name = "user_led3",
" u2 J" t6 X- [. q6 E .default_trigger = "default-on",
! |/ h" P% y7 j: I& _ },
' s4 v! n8 w) b) R1 q};
1 j' c5 r0 Q n% k) p3 R& F f y; B) K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. s2 A& x) O! T0 G! z; x
.leds = da850_evm_tl_leds,
' q3 K6 a- u. ~; U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, n; }+ m2 c# g" |
};. f6 n6 V( [: m1 i5 y1 b% D& W
9 E/ c N/ ]. u% y( q. H
static void led_dev_release(struct device *dev)5 h v7 K h+ h( V( q* m' ?
{
' O$ z/ I6 ?% P. v};2 j: y) v9 M! L2 i5 J! g+ P
0 K* c* a: G( K' V
static struct platform_device da850_evm_tl_leds_device = {
! J, j* c# X$ ]; P" h ] .name = "leds-gpio",& }' V5 n n: t4 r0 X4 H
.id = 1,$ S4 s- ]9 @* @/ f0 M+ i
.dev = {& `7 L0 u; Z4 \% ]: {! x4 |. K: H9 P- m
.platform_data = &da850_evm_tl_leds_pdata,
}& k! O4 k6 U2 h9 K% o. L) G0 }& ` .release = led_dev_release,
( @% |, u T$ [+ \# K }/ t* t5 |9 H) |: `$ X! w' x! Z
};3 ?5 F9 ~, @7 o
8 F: }- V1 v5 T0 |* t: [
static int __init led_platform_init(void)
+ [# K' s0 F9 U. q' ^4 u{* [8 q7 r% D4 l' |
int ret;4 p! k, p/ S2 S6 N* H
#if 0
% P- f9 w+ g+ F4 [+ V5 a# z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# X3 U4 Q! H# N, n% l4 [
if (ret)
5 v" `4 \. ]% ?9 J/ F7 _! v" ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* N Y+ K; b! ^4 I0 ^ "%d\n", ret);0 B: x3 \1 l- y
#endif4 Q4 ^9 u0 M& \" [, J& x# b
ret = platform_device_register(&da850_evm_tl_leds_device);
! P8 g' d5 X/ j7 U if (ret)
r6 t" N1 X& P# S+ p pr_warning("Could not register som GPIO expander LEDS");5 e6 [* M6 a. M! Q. G
else
5 ~) Q& [& ?; t. |( q1 O6 A/ I printk(KERN_INFO "LED register sucessful!\n");
. K; g* F1 x" b5 B) Z
1 u( I0 {6 H x return ret;" s' Y6 g" n' I2 Q9 `; L9 R }
}( d% p) J" v# `
& v0 d* {6 t: E( ^0 sstatic void __exit led_platform_exit(void)/ M- Z3 ^1 G, P# w* ~' @, J8 D! n
{
' i" u; M8 \* J1 R* A. O8 R platform_device_unregister(&da850_evm_tl_leds_device);, J3 ?! p7 I5 c% X- U
+ I7 U9 s5 E8 }. C. b/ a3 E( n printk(KERN_INFO "LED unregister!\n");2 N4 p. l" Z4 N
}
& b: @/ D2 k9 p
5 E; a! m* o A* J5 Jmodule_init(led_platform_init);
u5 S1 n. `, U$ a+ K6 \module_exit(led_platform_exit);0 n/ V6 K: D* v* T5 v H
& {0 o, y1 R9 `/ P+ o2 ?+ b
MODULE_DESCRIPTION("Led platform driver");' W7 c- ~% i: B l0 o
MODULE_AUTHOR("Tronlong");
, W" n% @: _. _MODULE_LICENSE("GPL");+ g0 f# \; g) D8 j+ q; v1 S8 P! o
, U( @/ T2 C; ?8 y% r |
|