|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 y- A( C3 E/ Y' {, y7 D
#include <linux/init.h>
2 C! Q9 N+ P' I( u3 F9 u#include <linux/module.h>* Y) ]5 u- q+ `0 `( s) D
#include <linux/kernel.h>3 D2 L. p5 e1 K1 h! A4 O2 b1 [' ~
#include <linux/types.h>
8 X& W8 A. j! y2 L$ d, d- @9 R$ G#include <linux/gpio.h>
. a7 s7 R' d1 m, u( e#include <linux/leds.h>8 V- e7 x. L7 }
#include <linux/platform_device.h>2 y; u1 O1 S, h( m) ]/ v1 \% o
; m7 i% X! k5 o# M& ~#include <asm/mach-types.h>
3 y9 y& n; m/ ]- x; g" J" f#include <asm/mach/arch.h>3 o9 p6 _- |9 ~9 \2 l
#include <mach/da8xx.h>$ q- g1 N0 v1 J+ |# L6 d
#include <mach/mux.h>& U5 J4 ?% ^8 C/ l
' s* G: J4 ?2 j4 ?/ U% m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: ~$ c# N& t2 x( z) s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 e$ m% X$ K) v/ ?9 T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 O0 ?# W- L( J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
E. x1 \4 l' e
6 C N. Y3 F& p: _) o, i; w6 w/* assign the tl som board LED-GPIOs*/
( i9 }1 B7 H2 D$ U' l" xstatic const short da850_evm_tl_user_led_pins[] = {
% S3 W$ M1 t* O/ A% y /* These pins are definition at <mach/mux.h> file */, t% w. ^+ H# B3 Y9 l7 n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 N4 f3 {; P2 O- }- S
-15 h( T/ B: ]8 x5 G- P" W2 u
};2 N. I& }7 g* E9 C j8 |; \
" p+ {0 q0 M6 x9 j$ ]static struct gpio_led da850_evm_tl_leds[] = {
3 V3 w' E4 G; Y( l! N. F' T2 } {
% H) a* j7 J' `; W' ?" Y! P' Q .active_low = 0,$ I" q0 z9 m# p* l
.gpio = DA850_USER_LED0,* b1 f6 v7 J$ M! {4 E2 b
.name = "user_led0",5 W3 E' ~" l+ s' a
.default_trigger = "default-on",
: w' d3 A7 I8 V& J# z& [ },4 s, @' Y" ] J( O
{
/ Y) V3 Y. e, y .active_low = 0,
, K- Z5 c: |( i6 g1 o .gpio = DA850_USER_LED1,* [; \4 {* d, d& T* t
.name = "user_led1",
0 x. F- I' x4 P& a- ^ .default_trigger = "default-on",: W0 b! _0 P( G/ J% X
},8 o( `: {" O9 k5 @+ q( w0 U
{5 X/ c9 I' }1 \, v# K4 t7 t( ~
.active_low = 0,
3 A5 E% G3 K7 D2 w% C. d) P) w .gpio = DA850_USER_LED2,0 l& A ]2 G5 p1 b! ~3 t! c' @" y
.name = "user_led2",1 T4 r2 o- w% t* E: W
.default_trigger = "default-on",
3 V& U6 D! r# ~: g },
: Z1 n9 a, P" ~6 }# e {
7 Q% |) e( t) E. K& z6 m .active_low = 0,
0 a: B$ Q. n0 x) t( k8 F .gpio = DA850_USER_LED3,# A/ q! U2 O2 g9 E6 i2 ]
.name = "user_led3",0 n" ], q* C+ K: n, T Y0 H
.default_trigger = "default-on",
& L& ]8 g; m3 |$ f7 r7 Y0 y },
+ a* N6 N% r' ^};- ?3 {. z5 q- \5 I& E
) {, [, |/ i: a6 `4 t# d* {8 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ ?$ Q3 C! _ d/ N
.leds = da850_evm_tl_leds,0 q/ K( @/ m1 J0 H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 T+ @0 X7 C; g2 n: v- a j};
; |# {7 k* S$ m) D8 ^5 [; _7 v1 q, @; j' O- E D1 `0 [
static void led_dev_release(struct device *dev)
D" |8 W6 z7 I( ?7 A L& j Y{1 y V: g* y7 w1 L- j$ m
};4 M- f. I% t q1 I) a0 X; ?9 ?) L m
5 ~0 }9 C6 D# G
static struct platform_device da850_evm_tl_leds_device = {
8 G) ?; k7 A- u! @- b .name = "leds-gpio",
1 z) b! B0 e9 V" A# e .id = 1,
+ a) a& I. i4 }% ` .dev = {9 D3 m4 n2 o! B- g6 J" P: v! e% |
.platform_data = &da850_evm_tl_leds_pdata,
7 p6 u* G# ]) S .release = led_dev_release,
4 v% T) l- E6 D2 ^1 Z6 f2 i }
& j/ F4 \ p% o8 g# J};% k$ I0 N8 V& k
6 ?, d% }9 k! F( F8 A- d
static int __init led_platform_init(void)
" ~0 o+ X6 A, j8 | M{
" Q9 v" g: P; M int ret;
+ d5 n0 A0 K J; q#if 0
# o: A5 |6 c+ v3 ^& B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) F9 U. B ]: r4 G% f' ?
if (ret)
7 ?* Y3 d1 Q8 u3 }7 J$ [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! a9 F4 s/ U0 J1 ]% x: y5 |5 R4 O
"%d\n", ret);' ^0 ~) G6 e) u* G
#endif
7 g: A$ p J& G2 L1 u ret = platform_device_register(&da850_evm_tl_leds_device);$ `# \- [+ E1 s2 c+ \) G* E" j
if (ret)2 m( {3 s9 x! I1 X
pr_warning("Could not register som GPIO expander LEDS");
/ v& ?: n: }' N9 W J6 v! i: Y else0 l4 x2 G, R ]. Q* O' s
printk(KERN_INFO "LED register sucessful!\n");+ G i2 ?7 s! Z4 L5 O# _
; H: n, a! x+ L# {0 {. O* ]
return ret;" m, N( Q) a8 R
}% X" X. `5 u+ V$ y, j$ m. i( R
+ W1 ^' N6 C: w" ~; j8 e5 t0 s2 ^static void __exit led_platform_exit(void)
; C7 P# E# f& E/ \{. h7 i9 Y3 _ `5 q
platform_device_unregister(&da850_evm_tl_leds_device);) K l- x3 O& o' B+ C: O
) M6 Q- j# o5 z% d printk(KERN_INFO "LED unregister!\n");. F- _0 ^; Z- r8 I' |: d
}: v5 N4 }9 i9 _7 R/ {- z6 H x
$ E9 _* _8 y' ?$ omodule_init(led_platform_init);
( H' d5 c3 P3 D2 N, c% Gmodule_exit(led_platform_exit);; ~$ i d8 `/ [2 u3 O
$ a3 B }( d( a. p% `
MODULE_DESCRIPTION("Led platform driver");' v' S6 w7 z, P, h0 b
MODULE_AUTHOR("Tronlong");
' c& f8 q% G6 r$ U& ]- j; PMODULE_LICENSE("GPL");5 _/ y+ y% n/ a' J( Q
- L3 ?: c2 h* ^3 v& d8 x) y
|
|