|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 ~5 z' q, K) Z( _ M, |
#include <linux/init.h>
# |9 W* c: D, L h4 ^0 b8 e#include <linux/module.h># X! Y3 R u% c. ]
#include <linux/kernel.h>
( i- t# Q/ J( v0 K#include <linux/types.h>8 E0 x# h" e8 R2 `
#include <linux/gpio.h>
5 x/ N% Y2 t8 V#include <linux/leds.h>' _5 i1 d9 \+ n4 H
#include <linux/platform_device.h>
1 Y5 _) f% F! r' s1 u* z
5 D1 h7 l+ A t' n# a6 E) N& E#include <asm/mach-types.h>
1 e% ]! c, O* H3 _4 B#include <asm/mach/arch.h># _4 Q e8 t# q; V, o
#include <mach/da8xx.h>
4 x- B3 v. O0 O n1 `9 P0 P! z#include <mach/mux.h>
6 F% k- s/ ]0 _. q
0 U: c( }+ w. I# ]) B5 x+ J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% W, S3 }* h+ @5 v, {. N6 M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 p) \. L8 `5 l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# S8 v/ q) Q/ G ]) a* p' Y, k5 n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): z2 O- ^) s9 K1 N8 i
" N7 H5 N2 h; Q; T
/* assign the tl som board LED-GPIOs*/- z' u# w3 F5 i/ L1 h/ L
static const short da850_evm_tl_user_led_pins[] = {" I0 ?+ @4 Y P- e8 |
/* These pins are definition at <mach/mux.h> file */
3 R+ ]2 ^( M2 X- l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 w8 Z9 M _; F7 f: g. X -1
G% o+ v9 V8 [( b};. b+ H/ C3 |4 m+ r" Z0 s' }6 k
0 a# Z1 z2 |5 J0 K, ^7 c
static struct gpio_led da850_evm_tl_leds[] = {6 P5 Y4 l9 \1 z a
{
) b. c& D3 l* r) N$ [ .active_low = 0,) d8 I3 |5 I+ t+ {, t" O. L
.gpio = DA850_USER_LED0,2 ^( p. R" Q2 p
.name = "user_led0",
/ n4 G0 P* X) F' o9 m" N; b& x .default_trigger = "default-on",9 q# E# P* h# ]* n
},3 j4 W2 O, U& g- w, U) ^: O& ~& ]
{0 L7 c6 ^1 w; }; U0 \9 S
.active_low = 0,
1 K/ o+ \8 V6 r# J O/ p/ s .gpio = DA850_USER_LED1,: Z6 c2 O' S1 X, c
.name = "user_led1",* L' P* ^" h# x+ R0 y4 n
.default_trigger = "default-on",
& F0 ?8 Z! a- Y: h: o+ P },1 b* t P" G, F! A6 Z n* M
{
. M. G9 F2 T: N7 w3 A .active_low = 0,5 _) X* Y q( T
.gpio = DA850_USER_LED2,
5 ~: H/ p6 x/ _8 t; l6 S9 {% d .name = "user_led2",
# `/ g& Z- ^! t4 O0 A .default_trigger = "default-on",
0 y8 S! ?! ? J G! d },8 J" v' o% Y2 ]' |& H
{
( S8 L5 h" |0 w8 ^5 n$ R .active_low = 0,* A4 \( G1 G9 O4 v1 T
.gpio = DA850_USER_LED3,
8 u# t* g4 P& E2 V6 k4 ` .name = "user_led3",# T/ k- F9 P: X& |
.default_trigger = "default-on",
) L O, G: C* q( U" b3 k( N },# z5 N1 a( L" d7 P |
};
8 ?4 c# j+ r. r) A6 f% u4 O5 k- z. P- E3 y7 ?! F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- n1 @/ T" A0 X9 V2 b
.leds = da850_evm_tl_leds,
: s, K0 {* b. E( G, N, d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- C4 j# M, j, s! `1 F# x0 u6 }
};) z6 N' C) t0 d# \/ K
+ b! P8 W. M! k9 H1 ^) Tstatic void led_dev_release(struct device *dev)9 l# }" @' B+ Z; G; F. H* ^( b+ G
{- a& d) Z* `; X# C: p$ @% D
};6 |1 i# c$ T2 g+ B; w- o
7 i- K0 G) O4 Xstatic struct platform_device da850_evm_tl_leds_device = {0 z* @' G4 Y% C& o3 D, o$ S
.name = "leds-gpio",
/ Q3 j& M) F: B8 v5 G1 u/ i .id = 1,
# Z$ Y9 y* Y2 c% @- v% k .dev = {
5 r; H& ^; i+ L: |$ ] .platform_data = &da850_evm_tl_leds_pdata,7 j* a' c1 m1 O: H7 M8 Y
.release = led_dev_release,
* h2 P% Y- u0 Z& y }0 R9 u* n- x5 D3 b0 R& Z, l
};+ m2 k0 k* l' E6 J6 X5 x, ]
7 Z! ]* i! {/ u/ R% F1 s) i
static int __init led_platform_init(void)2 L% L# k2 n! v8 m0 L7 d$ \- q
{
' p; s/ b! b5 |$ s' }) C A int ret;3 f. ~" x( A# ]: n/ x. h; C8 n
#if 04 O- G( F+ f: M- ^& U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ w) g, N" O, _) r# e if (ret)
3 K" k7 @+ [& a% ^# x0 E/ V7 v/ G# V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 N% e- H1 N" w$ D( l
"%d\n", ret);
7 ?4 f, [ I& {; b- ?2 k: E# X#endif* W' { n& Z4 E+ A) ~9 y
ret = platform_device_register(&da850_evm_tl_leds_device);
: ]' N, ~+ j! Q; ?/ R, T if (ret)
+ C: u- M+ A! W# r pr_warning("Could not register som GPIO expander LEDS"); L. P; m% S3 X# I% O5 p
else+ K& L* Z* d/ R# N; _
printk(KERN_INFO "LED register sucessful!\n");
3 p1 ^4 R, n9 O0 q1 l# h: B% t. |/ z# h6 O/ d0 C# S
return ret;! j, O& h% E, n9 y8 H
}5 T5 p- ^5 o1 H S7 L' s" A
8 b) Z, H9 h! ]
static void __exit led_platform_exit(void)( @# W. q% T; e- j( @1 }: o
{, j2 X4 e* Y7 u6 X* h7 y
platform_device_unregister(&da850_evm_tl_leds_device);: z- h' Z3 \$ c% C
5 U2 V. D2 z6 N printk(KERN_INFO "LED unregister!\n");
/ \9 d$ @0 v# D0 c}9 O' V: x( K* ] ]% ]% Y, r. A
+ q; `5 f" }# e. q0 c$ u
module_init(led_platform_init);
0 F$ T- e$ _4 p% smodule_exit(led_platform_exit);! \8 z7 p+ g' B! H" w/ t1 J; Z
" z$ w5 C7 l. J* B' g/ M' x! p9 dMODULE_DESCRIPTION("Led platform driver");# K% b! o* O! }# e$ v6 R0 d \
MODULE_AUTHOR("Tronlong");
1 B* Z7 M- w6 D# TMODULE_LICENSE("GPL");
) c3 X) p$ c$ r# s x% l# b# L/ p* T" j; x
|
|