|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* |1 }# [ x6 n#include <linux/init.h>+ \; W8 c7 c6 k% x s2 j
#include <linux/module.h>; \) a7 m/ z! z: L ~9 D
#include <linux/kernel.h>% Q3 n: W! S) x( _2 e
#include <linux/types.h>
4 i; {# c' i! u. u6 }" U#include <linux/gpio.h>
O& |; X! w) r( z0 A; L7 \#include <linux/leds.h>+ q7 T( F2 }1 x( X+ g4 w( L7 d
#include <linux/platform_device.h>
$ h9 }+ t; J0 `7 Z7 [0 B, l! L
3 ~9 M; V. A8 d#include <asm/mach-types.h>
' a9 m2 k, \4 @( u/ ]) {8 t/ @, }* c/ q#include <asm/mach/arch.h>+ k7 b$ M. o0 Y, p" I7 r1 N
#include <mach/da8xx.h>
* D' A f- q# r$ @0 h- [#include <mach/mux.h> G* _4 {: A8 a2 r$ O$ K+ A
7 y/ Q/ v2 W6 Q+ Z- x$ V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: j P+ F3 I# k; e+ v, F3 u' B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' {/ S5 s1 o: q' M- Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ L: ~- I( {' O; W8 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), _8 b" s, L5 ?. K3 \
2 O- N" w* \; B; x' E& t: D/* assign the tl som board LED-GPIOs*/6 r; M" @9 b& J# x; R4 L$ K9 w' v
static const short da850_evm_tl_user_led_pins[] = {% b1 Y7 s" x* C- U% o: P( o
/* These pins are definition at <mach/mux.h> file */
/ S: r! S0 J8 y0 z. B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: c( _* R" c) z# S" H A
-1
0 }8 k6 p: z, m7 p; V};4 G' m7 a$ R8 u. n4 y( P/ L
. R F) _/ T: a2 {) k: x: x2 W
static struct gpio_led da850_evm_tl_leds[] = {1 A5 z5 w4 y) e
{
: k+ p/ q C) k0 D C+ e7 e: a1 t .active_low = 0,
# z! D$ O1 A- e .gpio = DA850_USER_LED0,
/ h0 v7 E" {7 L .name = "user_led0",
6 R% p* x( p& Y( v# n .default_trigger = "default-on",
- U, l; J9 m# O0 X# Y },
1 R/ d# K/ u1 e" D# {1 J4 V( ]( h { _* D- N8 R7 ?( C- |
.active_low = 0,) r6 ]! a/ o0 e- X; Y3 `
.gpio = DA850_USER_LED1,6 e# o6 {6 I* `1 s# O
.name = "user_led1",
i5 Y9 [5 D `! C" } E .default_trigger = "default-on",
7 U" r% w1 l) F5 Z },& u: _) Y2 P! ^* @2 _
{# L8 ^+ l. v; B5 u: t M8 n$ O1 W
.active_low = 0,( {& ?: C" C* h% e* ~' n' d8 a' c: _8 z
.gpio = DA850_USER_LED2,7 C) T% [3 C6 z4 X/ q- \) F
.name = "user_led2",, g/ \3 Q% X* G
.default_trigger = "default-on",
' }/ ?+ Z0 G0 y },
! t: k' \+ I q; ]6 H {+ r3 P j. d& h: d& U- e$ ~ ~
.active_low = 0,$ L+ a+ |9 \" y# l
.gpio = DA850_USER_LED3,5 t& s3 u; J" r! G$ N/ D0 _, c
.name = "user_led3",
4 y( ^3 P3 C: B .default_trigger = "default-on", H6 I* p+ D+ B& {5 b
},
- u7 B# G. N1 t};5 _% }( S9 r# B- _/ O
7 T$ r: o7 n& J$ z; N4 i* Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" A) j! ~# X9 t; u! ^; | .leds = da850_evm_tl_leds,
6 L! Z; H' S, g/ Q+ s5 R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 {2 B0 }% p0 j# M: X" ?
};5 n! p: c2 ?( V& G! a
1 w0 _% x0 R# V3 n( Y+ t/ J/ c
static void led_dev_release(struct device *dev)
$ u P8 T; w1 J5 [{6 |& j( w/ e( h2 c
};: t, c2 x2 w/ T* E
* X' l a k# H8 v( S5 f
static struct platform_device da850_evm_tl_leds_device = {. C2 B- ?0 X4 L* z+ Q. e
.name = "leds-gpio",, _ s* d& W9 O0 A! e
.id = 1,5 G, K/ [7 U& h+ a, j5 p
.dev = {
; [0 }' z+ j& M+ W3 C3 n$ d .platform_data = &da850_evm_tl_leds_pdata,
- [5 F/ R) }0 ?( R, _4 [$ j .release = led_dev_release,5 ]6 S+ D# j) R
}5 M: L* S1 C6 X2 G
};0 L: S: y% j4 _
+ V2 c% C( |! h* L
static int __init led_platform_init(void)& _$ W# t/ d. i; v* c
{
3 d2 _0 n h( v- y4 p int ret;
6 Y- ?1 H+ J7 d' s: {% ]#if 04 d( K) F5 l! z1 a$ z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- k2 g5 ~# c- W) b# e2 [ if (ret)
" |9 t! l* D$ ]% [2 d$ C pr_warning("da850_evm_tl_leds_init : User LED mux failed :") n8 ^0 H: q5 n7 ]" l6 H9 }
"%d\n", ret);: c" L6 _- {; f% p1 e% C
#endif
1 s$ {$ V, x1 c5 c* W3 l2 A& g ret = platform_device_register(&da850_evm_tl_leds_device);
7 B6 D9 b: ~2 G g' Y/ Q1 ]- v: w if (ret), C! Q1 |( X, i1 N
pr_warning("Could not register som GPIO expander LEDS");; G4 K) |; s" O9 f" [
else9 d6 F' r# O8 o7 E
printk(KERN_INFO "LED register sucessful!\n");
' T' E8 J7 A$ s9 t* N
# }9 Q3 q t* |* A' x; m% ~: r return ret;
4 a+ D6 R% ?1 b/ Z( m& w a. u}
6 V2 f, U. U, r* D3 O+ l) i6 j1 ~) b! Z$ ^- k- s, j
static void __exit led_platform_exit(void)4 R( I# T' j& m) r% E
{# V) F+ m3 s7 A1 e; |0 Q q
platform_device_unregister(&da850_evm_tl_leds_device);4 I7 \- B+ N' p# k+ h5 t
# D9 P; p. @% Q/ p7 P( I
printk(KERN_INFO "LED unregister!\n");
0 l: |4 ?" L4 V2 C% n. M}# D& q# f& d9 l0 S
1 M9 _+ T1 `0 x* E
module_init(led_platform_init);2 z& c. k. u% X. ]4 m4 b
module_exit(led_platform_exit);
# H$ D: O l Y& f; {3 N, o+ X; D9 j: D. D& n9 A' a
MODULE_DESCRIPTION("Led platform driver");3 C. S% w7 x: [/ j/ q
MODULE_AUTHOR("Tronlong");) W ]- ]$ f p% r( _ `
MODULE_LICENSE("GPL");$ O6 L, k# _% R, D
5 U4 L$ E! A C& q' u
|
|