|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, V2 A( X7 [, I- H" `3 r
#include <linux/init.h>( s8 @7 }. F' A" d) M" g$ U
#include <linux/module.h># M9 i/ g2 v M; [
#include <linux/kernel.h>" _5 d7 G. l) u
#include <linux/types.h>6 l! t& p6 I# O* q7 ?( O
#include <linux/gpio.h>
$ J, q7 h9 Y7 b! J9 g) O+ ]- S#include <linux/leds.h>4 {( V6 Q$ u: C
#include <linux/platform_device.h>0 }% o" {- E0 e" m9 H
6 D, [6 ~$ Y( A* R- J
#include <asm/mach-types.h>! w) [' g; k7 @6 x
#include <asm/mach/arch.h>
$ q) p; b8 F7 ?; B6 u#include <mach/da8xx.h>
, R% h3 P* V. f0 K#include <mach/mux.h>; h3 l+ L! F) m9 y! }# L/ a
/ m& Q1 l7 W5 ?( r+ c- L" T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; {! y9 t/ T' ?- h: ~5 b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! q. n/ b/ D8 m( u* P5 w; E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ w/ V; }6 j. a, h( Y V5 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
?! R0 d' [6 H* f8 V8 A9 f4 m6 `0 A" q7 F ]4 B0 |
/* assign the tl som board LED-GPIOs*/
3 K$ K8 m6 a) c+ p* ~& i- \static const short da850_evm_tl_user_led_pins[] = {' F" \4 }, [4 m9 C% ?
/* These pins are definition at <mach/mux.h> file */: `: l( Y, ?! i3 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% V" u1 U8 B- _0 A" l# D
-1
( V) s, V2 _; F! p};& K. T0 v# H' _+ g/ j Q
3 h: P% ~7 t) p7 k% n2 |- R
static struct gpio_led da850_evm_tl_leds[] = {
3 Y! o/ K6 M( }% l; r: k7 k3 S! ~ {
5 L8 t0 X) X Q+ O+ T .active_low = 0,9 P' E- X* [& X* v0 z
.gpio = DA850_USER_LED0,
' e5 g. {" N$ n3 \ .name = "user_led0", p. E: Y) _6 u1 X" ^
.default_trigger = "default-on",0 C, B5 C% B i4 S
},! O: l. _5 r# T/ Z& N0 y
{
' F4 G2 d& Z1 x2 }7 B .active_low = 0,
4 |' ]1 l5 ?; s3 I .gpio = DA850_USER_LED1,
4 z4 K. _2 c0 F. d .name = "user_led1"," C# E8 M3 b* D+ _ b" t& B( b
.default_trigger = "default-on",
; ~( [# Q9 `3 J },- Q/ S1 Q$ H" O; g v
{: \9 g4 ~; f9 o' d* Q' ^
.active_low = 0,8 V: L8 v2 v+ u1 D
.gpio = DA850_USER_LED2,
$ |% H; H, W6 c; B( [ .name = "user_led2",! \" W6 q6 ^2 n: P, U% q
.default_trigger = "default-on",8 e" @. s& ? P, x* z
},! U9 y+ ?2 s" u$ B, f
{
# M; c e4 @5 F6 \6 X .active_low = 0,: o- K- ~9 `+ b
.gpio = DA850_USER_LED3,
$ {2 [: }3 G2 z$ p .name = "user_led3",/ o- q$ @: y1 v' ^0 u: e
.default_trigger = "default-on",% z* s4 d% k- @/ q% P- ]8 @
},5 A0 k0 A: ?$ A3 u9 n$ @
};
$ M* c5 F& g8 E/ e
5 I5 L+ x( b9 [( c: C* Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" E# n$ A( q p8 N, M
.leds = da850_evm_tl_leds,% ]. `4 a' d* _8 w4 m, y. _5 h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 P% Q" ^) I5 D9 D5 i( X
};8 f/ y! L( A/ L2 E
! Q1 [9 ~4 o# t8 v/ W& Hstatic void led_dev_release(struct device *dev)
7 j: m J1 C0 L- S$ y; t{
& E& X0 X6 O9 }2 Y};* Z) W2 ]3 W$ {+ G, ]
, M% R6 e$ z4 h9 X( P& u2 [
static struct platform_device da850_evm_tl_leds_device = {
( [3 i) K& s. H0 a2 G3 o1 R% Z .name = "leds-gpio",, K# }8 I' L' a8 P/ t9 ~$ I' `
.id = 1,7 D5 Z( M& k! q9 x: d8 N: f# ^! N
.dev = {
) D! g( L$ ]4 X# K .platform_data = &da850_evm_tl_leds_pdata,. G8 C& c: S! l9 ?4 F
.release = led_dev_release,9 @) w: @& c& H
}. k# f9 g& M) k: c, ~3 ^9 Z
};) `& i5 x, q. N3 C
" A% O! @' j' N( Fstatic int __init led_platform_init(void)( |$ A; M5 |% C1 T
{
* E4 j: L& T8 K v% m* S int ret;
% n0 `, R( X1 s, w9 ~$ N3 f8 g#if 0
! R" U' B2 S4 j+ N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* V$ ~( n! ]4 M if (ret)
, }/ Q s5 }" \$ f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) w; B& G/ M5 B7 q, f "%d\n", ret);
; Y5 X) N; o3 }) K6 o7 @3 Z4 I0 G#endif
* p9 Z7 Q/ E0 P7 W1 m ret = platform_device_register(&da850_evm_tl_leds_device);
e; O; T0 J) k5 ~) H I; p if (ret), u5 X! n; U6 K5 E' v
pr_warning("Could not register som GPIO expander LEDS");9 d- G# ?% E" `' E3 W7 a
else# x6 P. @" T/ q/ z# L8 ]* O+ N4 d
printk(KERN_INFO "LED register sucessful!\n");
3 l# P9 `8 @. }/ ]/ p/ p W
% U5 F' J8 T+ C- C return ret;% Q X# \* J( w. j! V3 m- l
}& b; t4 t: |6 m& \- `* B) T
; g, V; |: }( W1 p0 q, o" u! Ostatic void __exit led_platform_exit(void)- s, g5 j+ V7 [+ g; v+ [
{* b4 D/ X; O7 G/ z( \0 W6 I
platform_device_unregister(&da850_evm_tl_leds_device);
8 i" x6 ]' F4 Q% x8 ]" r ~4 z% z q
printk(KERN_INFO "LED unregister!\n");
. _" q5 c }8 F& `}. g; Z' @" k/ T- G! w& T
7 e+ h" E3 F& U. S
module_init(led_platform_init);
4 v% w: r2 L2 @7 C+ C6 k* }module_exit(led_platform_exit);
4 U( l" o4 k( T% \4 ?9 _' ]. q
MODULE_DESCRIPTION("Led platform driver");
0 ?7 T9 z) q' e* i0 K( lMODULE_AUTHOR("Tronlong");
6 z3 D# }5 q) |" e" d' w7 ~' W1 iMODULE_LICENSE("GPL");
+ H0 q" m* v, ^9 p1 K* Q, d: v$ ]. r& I$ t
|
|