|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 ^8 F+ F# X* m3 G& W3 R T2 k
#include <linux/init.h>2 R2 ~: l- y* Y; o9 y& \7 P9 u& u
#include <linux/module.h>) f+ E1 x$ T" K2 `2 N
#include <linux/kernel.h>! |- ]' p- M2 ~7 Z% c: @; e
#include <linux/types.h>
. `; `+ ]6 k+ U# ]& s6 Z) w) |6 S#include <linux/gpio.h>( @% S' d8 u& h
#include <linux/leds.h>$ B( c% v5 t6 f. P
#include <linux/platform_device.h>1 Z( e( u/ r( y1 L
. v: \& M& u. w& s
#include <asm/mach-types.h>' B- f6 g" T1 @9 O
#include <asm/mach/arch.h>+ r8 |5 `: W1 t& @8 \( i! u: b0 D
#include <mach/da8xx.h>: w1 J; {- ]8 N4 ?
#include <mach/mux.h>- ?2 n& r/ G, F q/ ^/ u8 M
. T- R, t( R9 s. S; s1 @: ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* i* k" R3 E1 p5 h, E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 }4 d F( l! K8 L# [1 z) [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, C/ A; x9 i9 u& Q. j+ c6 X0 Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ `4 ]8 f2 D s6 S& P
% K6 C% _7 T Q1 T9 j/* assign the tl som board LED-GPIOs*/
( c* o* g3 q, }& P1 X, W6 Y4 ystatic const short da850_evm_tl_user_led_pins[] = {
( Z/ Q8 ~) h4 g* m /* These pins are definition at <mach/mux.h> file */
& @2 p* h9 O* _5 J" V; r b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 y% m. q: [7 f4 h* P
-1
, W2 {) D$ ^* P4 J3 n+ _! f};
3 |1 R( n; l0 p) B1 W+ O* L0 ^/ P7 h; G
static struct gpio_led da850_evm_tl_leds[] = {+ k ^2 k/ ]* s+ d7 X
{8 y9 Y* u5 D( F! M: \
.active_low = 0,! ^! E# F8 b0 n7 ~9 s# P
.gpio = DA850_USER_LED0,
, N; T& C2 { {8 [" F# H# a .name = "user_led0",/ |: T4 K+ C% s# l7 g2 i
.default_trigger = "default-on",
% j+ g- Z. A b( _6 G. z },1 _( V. p0 R. `9 _, J# [; l
{
2 [1 e$ ?2 J* W; i9 H& k- K .active_low = 0,6 r) F8 ]8 t, ^6 Q$ T
.gpio = DA850_USER_LED1,8 h {2 Y2 L. m1 z/ M
.name = "user_led1",
- I0 N; R- g% ? .default_trigger = "default-on",
1 v3 X9 m! d P2 Q9 K. k },- z; U: A, D# c# _+ W* x$ d! f
{
& x4 h8 @" h4 Z+ l/ ?1 }& ^' [ .active_low = 0,
2 I, Z; W8 O8 D5 t6 [4 e i3 [0 f .gpio = DA850_USER_LED2,
7 g2 j5 c @. ^# g" n5 M9 \- ` .name = "user_led2",
* u3 d$ p2 b8 x6 | .default_trigger = "default-on",$ G, X- O% i$ N
},7 ] n# Z( R" w5 b2 I9 j
{. g+ T0 w7 a0 P# z
.active_low = 0,6 M9 j8 B2 q4 h% x
.gpio = DA850_USER_LED3," h% D+ M, ^0 S
.name = "user_led3",
' `8 U5 Q1 r/ X$ @0 s# | .default_trigger = "default-on",
; U! m( Y* N7 c0 l: h }, N& }* ^7 D1 J0 W1 {8 Q! Y3 W
};
% S( b- m) f- e& `% ?: b5 G7 P4 r8 X7 M# ` u2 c3 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% v& k/ o6 {/ [/ V% O7 L' R5 I
.leds = da850_evm_tl_leds,
2 } `- m: e7 P; Z0 [6 { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; E3 W( P1 I9 a% j+ e};
; I8 W5 G. m* I1 u4 e. F$ v6 v: \" |- H' `
static void led_dev_release(struct device *dev)
" h( G- F3 [9 G7 s2 V3 {" L{
U+ K5 L( a9 J9 i( A& e) ?};
% i; X+ N# [2 p* k& Y4 Z9 A; C7 m
static struct platform_device da850_evm_tl_leds_device = {
/ A6 ?/ ?- ~" q .name = "leds-gpio",
& l! N, l6 o s3 C: p .id = 1,
$ J" m3 C) N: `! o- R .dev = {
4 z. Y7 Q. r/ P2 N# p9 c .platform_data = &da850_evm_tl_leds_pdata,- h1 P1 B8 y0 i
.release = led_dev_release,6 M' G0 [# ^+ a! ^8 e
}
, S3 V0 `5 j) g) F& _% e5 B};# f3 O k' t% S3 O/ r% p3 U
8 a! \# C* Z, r0 I( ]# p$ `static int __init led_platform_init(void)' c4 z. x8 l8 f7 @, \
{
0 E$ E; ^, m$ c, `) |( J int ret;
/ F1 J. C. K# ?5 G#if 0
+ L% m4 c" F( h4 D5 W3 {- K7 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( m, Z* o& N$ c1 f8 Q( I; v
if (ret)* Z" |/ v2 h9 ~' j( V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 |1 u* S \5 p. a: T, n9 e "%d\n", ret);. }6 M7 {0 p, E8 c6 l
#endif# `3 O8 y0 j* f- t* x V& Q9 d
ret = platform_device_register(&da850_evm_tl_leds_device);
, m$ |* |' t9 f; H6 h O- D4 @ if (ret)- m. |+ Q! S$ f3 y
pr_warning("Could not register som GPIO expander LEDS");5 N- p8 |. P& A# f0 J
else
8 U* E p5 ?4 s/ _8 j% f5 f printk(KERN_INFO "LED register sucessful!\n");" B: F5 j% S/ I. S: c0 |; }
6 G+ O2 j* C K* P
return ret;
/ y* M' j/ S, g7 W3 q% {}
5 Q: c, S/ O; s5 m" |$ l, u) d; [0 N' b( r# Y$ l1 o
static void __exit led_platform_exit(void)
; k2 [! h5 J; E6 w6 t }{' h T* d- m( r# h6 L8 N
platform_device_unregister(&da850_evm_tl_leds_device);! z0 I6 _$ U. a
* T8 `6 Z# l! V, _1 l$ v8 D printk(KERN_INFO "LED unregister!\n");9 [/ h% l6 q) i# G& i" j! l {
}2 y! x7 Z. G7 j; ^" y
2 c5 j( K3 e: s6 K; ]; L
module_init(led_platform_init);
8 B( N, y1 y& [5 N; Imodule_exit(led_platform_exit);4 n- I8 e/ ?- A/ p3 Y* {2 a
6 }; h0 q4 ?" R
MODULE_DESCRIPTION("Led platform driver");
' c& U5 Q+ ?7 A. A S, Q! sMODULE_AUTHOR("Tronlong");* a; Z! T. x2 s& |% R4 j% n
MODULE_LICENSE("GPL"); R% Y6 z! G( Q4 B {( p
( }2 o( F$ }+ F& b- o
|
|