|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 E* d- R7 {1 |; I) Q3 Q F
#include <linux/init.h>5 o, @ }$ A& H8 M& b) g
#include <linux/module.h>7 P( X2 E I- c
#include <linux/kernel.h>6 ~3 s4 k/ D' u
#include <linux/types.h>
- B8 y: S- V. |! a3 [2 a#include <linux/gpio.h>
5 {4 W- q+ b' q' l9 ]#include <linux/leds.h>
7 @5 |- |9 o; j#include <linux/platform_device.h>5 d6 W' H: \" U
: M( d0 ?% S. l" `
#include <asm/mach-types.h>
$ S& {$ x, C: w. D5 n6 ~# S#include <asm/mach/arch.h>' c4 m2 f& z, g1 h' N
#include <mach/da8xx.h>1 O' j6 V; V; }
#include <mach/mux.h>
: s/ X- x. g! R e3 T, W* @9 S# s0 C, V0 Z) t M c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- a) M+ V3 E' H% j' a+ ?# o9 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). N) h0 ]. ]0 K" ~2 H9 ], O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ q- _7 V% Z0 A- @2 F* k/ D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 p& F, }4 U: O9 ^. y
. s- f- W+ @. W# y( [/* assign the tl som board LED-GPIOs*/
4 b( B5 M3 V* T4 ]! x; H$ I, F, Cstatic const short da850_evm_tl_user_led_pins[] = {
, l' _ N f$ W" X /* These pins are definition at <mach/mux.h> file */2 E5 x- x' @) V& ^) B' G) m) n: X, ]) \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( L' i/ N% V8 @8 z& Y) g
-1" ?- v0 a8 U+ i0 s" B% _/ y' N0 Y
};( B n2 G' z7 s, p4 E
8 \7 G$ y! e$ }
static struct gpio_led da850_evm_tl_leds[] = {
7 W* ?1 _* a* o/ @& X {
4 `4 B3 \" U, b5 R6 H+ Z L* z5 H .active_low = 0,8 }2 f2 q' _4 C$ q Y" u" D
.gpio = DA850_USER_LED0,6 H4 p- J5 C, C6 a6 D! _
.name = "user_led0",+ i# h8 x2 V- ^! B$ W
.default_trigger = "default-on",# w- t; D8 P0 O8 w! N, a
},$ m* T+ [( a0 S
{
7 q8 S' ]) u: K- V% _ .active_low = 0,
; T; t! c$ c# I, A$ u( o1 M r .gpio = DA850_USER_LED1,
1 O) X0 n2 o. m* x) S .name = "user_led1",
2 K: A7 g0 Y$ g5 \. V( e .default_trigger = "default-on",+ i5 e9 o h5 f w
},/ \9 x# W2 ?& n+ {2 P
{
0 n: Z# C1 T8 G) s! ] .active_low = 0,
- l0 s2 a7 O+ m .gpio = DA850_USER_LED2,
5 t5 s/ P8 t5 o( _* g( U; `- L, b .name = "user_led2",) k2 r& x& ] L2 d2 C
.default_trigger = "default-on",
- ?# L$ Y! f, @2 V, C4 t. i },
# }0 E1 |+ J- [8 k' u {2 Y$ q7 m' Y& G6 t" A; f
.active_low = 0,/ R9 A9 q$ g, L
.gpio = DA850_USER_LED3,. m" A Z& u0 \# u% P. d9 R9 h0 u4 M5 C
.name = "user_led3",
h9 E" r# I$ [" U4 m$ X- ~' A% V .default_trigger = "default-on",
" M9 d9 m" _ V2 Q },
, Q/ `. s' u4 v* r( ^) F, _9 f8 a};
; |/ @+ z5 n( H/ o: @" i# v1 L9 s" F/ t- Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; b/ z. U/ F# y" }$ z3 m .leds = da850_evm_tl_leds,
3 l! E' h$ f( A/ ^# j( U% i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 j. X5 {/ }8 x- C$ [};3 M6 I% }3 B( R- g- F+ k# [3 u
5 Z2 x3 M$ i) B, p) G, Vstatic void led_dev_release(struct device *dev)
% |) E Y6 a. J+ @{9 v, B9 ?/ K7 k8 g) f; v5 i3 _4 D
};
8 P0 {& q8 t/ r) X* Z! U& V& Y8 f. e2 z0 ^% O2 q0 t
static struct platform_device da850_evm_tl_leds_device = {
- {& S3 W+ e7 H) b, ^ .name = "leds-gpio",
" W4 L$ ]0 ]6 w* N# Y: f .id = 1,9 Q Q. ]6 L" ?% N8 k
.dev = {! U" O' {5 z) R* ~0 k
.platform_data = &da850_evm_tl_leds_pdata,
) E4 R; d, |, v- ^ .release = led_dev_release,
( M. { z8 U" @ S" f5 C( @2 B } G K& F, _5 S5 W$ ?. X+ o( P
};# w6 d/ G4 h6 ~& l/ _
3 w+ [. W# T# x& h
static int __init led_platform_init(void)
9 N& }, H7 {8 J0 l" U6 l6 c{
1 y2 D, ^: u( }# j* A) W int ret;/ j7 O1 j8 j4 Q1 X2 y0 W; {+ ^
#if 0
/ c* y' K" T c: v- p( e( e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; a9 x7 W+ X% h/ E4 k if (ret)& N/ z; `8 ?( F* n1 r& r6 I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 C" @ L' D) R
"%d\n", ret);2 ] s. G( ?$ }/ l
#endif% I) [8 {! e5 z
ret = platform_device_register(&da850_evm_tl_leds_device);0 P8 c% _/ x) G. l3 o& |$ I1 T& m
if (ret)8 K- G! q# {* t: G. g) L( B" |# P
pr_warning("Could not register som GPIO expander LEDS");
# N4 q1 p8 h: r9 M else5 _2 k, N$ [, [4 u2 L! a( z5 E
printk(KERN_INFO "LED register sucessful!\n");2 A. ]6 q- L# f3 S y7 ]
9 `" f1 a" b7 Q1 M
return ret;
, t7 z$ q$ L, ^7 O( _+ ^/ P' J3 E}3 v5 C, c% k. |* v, {# O- _
- S' @9 c# j2 [* K7 P( v
static void __exit led_platform_exit(void)
2 a) q2 H# p) S6 r{7 j$ O9 L; B, w8 F- \
platform_device_unregister(&da850_evm_tl_leds_device);
* i4 d! P/ \& r9 J& {7 b4 V# ^7 o- c1 A( P v
printk(KERN_INFO "LED unregister!\n");4 W. y- t. ]- B$ l
}: l4 y1 R5 z* [* @% E/ r8 ~
& M. z0 F3 }8 ?! H% U- Y
module_init(led_platform_init);1 m1 w: f$ y' B! _$ ?; j8 @
module_exit(led_platform_exit);% L l, u7 q( h$ g2 `
N" q+ J. ~9 z7 J: _1 x1 v
MODULE_DESCRIPTION("Led platform driver");
}5 @% g; K& rMODULE_AUTHOR("Tronlong");
" e6 Z+ E. B8 X f, `MODULE_LICENSE("GPL");
g' {/ k" Z! B! e- |) U
' w. z4 S4 b5 U2 l |
|