|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 G0 ^ a1 W" T" Y
#include <linux/init.h>
* R6 ]# ^% d% v) Q9 b( t; A#include <linux/module.h>
( \2 I, q& ^: q! p2 l8 D#include <linux/kernel.h>! M2 g4 Q" }0 O/ p( [4 p% v6 R
#include <linux/types.h>
0 j/ E# {7 u9 g+ ~ ?/ O+ w#include <linux/gpio.h>
; n7 j" [2 {8 X: ]0 S#include <linux/leds.h>) e0 F5 I; n- N3 D, x1 n
#include <linux/platform_device.h>+ H' t" `7 u/ F8 `2 f
! T8 V' z; E2 v. U6 {; J/ \#include <asm/mach-types.h>; z* u" j! N( g: Q2 y# e
#include <asm/mach/arch.h>
9 o: x! y# n( Q# ^' g% y8 W5 @/ {#include <mach/da8xx.h>
9 _: u/ t( R' X8 R% j6 f; J$ Y% r$ L- m#include <mach/mux.h>
) [8 x6 I. U) B2 F
/ r6 J( {5 u! I( Z, o: Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 ~% r7 n# d4 G$ C' Q& w9 s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 ?5 k l! q* o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* B5 ~* u6 |; y- R# s# g) E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 q- r: G0 |; j8 x0 Q
) ]# L1 B' W$ X- _1 x5 a* M, d/ O/* assign the tl som board LED-GPIOs*/
1 e) m1 v! P" V* N) N! ^. _; Z) W8 }static const short da850_evm_tl_user_led_pins[] = {1 B: z) K7 Y0 q, F. B- O
/* These pins are definition at <mach/mux.h> file */
/ }( S8 m% n; T- G1 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) t- \! J/ [' n# C8 K' E: t
-1
6 Y6 R7 {1 ~1 x" w/ c, [};0 z. L" a: p c0 P9 B) X- t3 y
9 I* X! e- n8 u9 [6 X) V6 A. \
static struct gpio_led da850_evm_tl_leds[] = {$ P- G8 S7 k, \& V* t
{7 N3 o. V% C( j, Q
.active_low = 0,1 G e8 d# g, t, P
.gpio = DA850_USER_LED0,
) R) p( Y/ g) A; R: t1 k( [ .name = "user_led0",
% j+ H5 G) f0 { .default_trigger = "default-on",# [' d4 c( [3 f/ i# P7 D
},8 W& W% y+ i+ H
{
6 f' ]$ d" H9 n .active_low = 0, E8 W$ |# |3 l
.gpio = DA850_USER_LED1,
3 A% a N5 [! v) ~1 w .name = "user_led1",8 `8 ^. I) t8 W- Q# T. c# P4 P1 L
.default_trigger = "default-on",; v/ w" o5 b3 K1 k2 D2 }# J$ v) k
},
) W( e, S4 @1 x' i) |5 d {
# p: `& E' D& d( G .active_low = 0,- P5 x3 C6 b6 P, |7 `- e
.gpio = DA850_USER_LED2,
! D5 |! G0 z/ N, Y1 n8 m. X& _, Q .name = "user_led2",* D0 U# V* E1 U2 ]4 [
.default_trigger = "default-on",
" R, z8 B% i2 X2 K. i/ f$ J! n. j },
( V) c3 {, G6 Y {# m& ?( M, x3 g" U2 o) z C, w
.active_low = 0,1 _% H- D9 x+ t, \1 l
.gpio = DA850_USER_LED3,
& l' G, x5 F! x, P6 T/ f .name = "user_led3",
( E4 A- a5 m4 ^3 l7 Y .default_trigger = "default-on",
( x) E4 L& u( }$ U- ?) G },
1 Q. f" d- y) t8 U. V/ K& n/ ]* a};: O0 ~! h. r9 D5 Z: N
" o2 y. S2 f9 k( F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- F4 {8 o, N5 M1 C3 e .leds = da850_evm_tl_leds,* U5 Z A2 K. a, e5 n3 Y2 b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ C( y6 P2 a& z- }1 U: A
};
; G& g( g% }/ k8 x Z9 z( z* L3 ]1 u5 t5 |7 H2 a
static void led_dev_release(struct device *dev)9 _* U$ i+ U$ [# m+ ^
{7 E, ?1 y: N/ z" i. v+ d# G5 s
};
$ b2 ?2 q+ D" J4 U" _
+ P8 y# T! |2 t: v: tstatic struct platform_device da850_evm_tl_leds_device = {# U- t- }3 n8 _: ~
.name = "leds-gpio",
6 L: @, r% E8 a .id = 1,
/ b; ~! G0 T% ~' J( n$ |9 Y: A .dev = {
/ E' o0 w$ k8 ~: O .platform_data = &da850_evm_tl_leds_pdata,3 N9 n; b7 B X1 [5 z
.release = led_dev_release,
* q% V) h# r0 R }
2 b& W I ~' Z5 J6 F& r2 y};' L' h3 u2 K$ a1 j
* \' u w: R8 z1 ^ C, k# fstatic int __init led_platform_init(void)" [* R2 b& w) b/ C e3 x9 d7 F
{5 i9 J# W4 G5 L: n& m! {4 x
int ret;
! o; b2 p, {; j#if 0
& n2 u5 Y# E% ], Y0 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- [6 A+ \3 i% S: c* ?( i if (ret)
3 L; ^2 l# g4 c. i- A8 j$ L5 y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- A( n! R: m" Z4 W( E# n
"%d\n", ret);# O0 o& B1 n0 [" Q8 Q) W' ]
#endif9 x. B/ G4 B9 c' ^$ Q$ [! n3 _
ret = platform_device_register(&da850_evm_tl_leds_device);
! a* G/ |( Z! @, N& S- [ if (ret)
5 } A: X- O+ B3 j) X# u1 w) S pr_warning("Could not register som GPIO expander LEDS");
. s$ v8 F$ W, N/ A else# p8 x6 b) P+ Z8 y; I5 O
printk(KERN_INFO "LED register sucessful!\n");6 t4 _* o4 D7 [+ ]' F
+ z. p! S& t) h' b! y& V4 q
return ret;
k5 S" E" Y, e3 A; Z! l5 f}
1 E( b3 Z3 s- z( K$ y
$ B, A( P/ ^2 t% bstatic void __exit led_platform_exit(void)
! v. H c0 d: ]8 c* X @) S6 R{
! W1 A. @. Y# U/ s% D8 k% Z platform_device_unregister(&da850_evm_tl_leds_device);7 P$ m' i9 ?& C" A, M
, d% j* V: X1 U) B9 C0 E
printk(KERN_INFO "LED unregister!\n");, ~! S8 A% G$ j. i4 k
}: N' R1 M+ n' `5 Q. x5 z5 r6 [6 R' B
' k% s4 T, y$ a8 `* s- M& i
module_init(led_platform_init);
$ B; \% r5 L8 y S( Vmodule_exit(led_platform_exit);
! H4 Z) P: X; b5 X
! y. j x% L8 d; ?MODULE_DESCRIPTION("Led platform driver");1 [' }- V& Y# J2 }+ i
MODULE_AUTHOR("Tronlong");+ }; c% ~$ H# j, g/ O7 r
MODULE_LICENSE("GPL");
- z# H7 f6 |' K7 x& V
# x* \1 P4 z$ j( p! c: N! L& \: s$ j |
|