|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ [, a5 M: I Q, ?* t#include <linux/init.h>+ W6 H9 d3 i$ t& e( h; l! C3 O
#include <linux/module.h>
# L/ j/ H& b9 d# i: c) Q#include <linux/kernel.h>- f0 u M- U- ~0 K- M1 _+ y) v
#include <linux/types.h>
% C. m( c& [. N" I: g#include <linux/gpio.h>& A+ p+ {+ R7 M5 R' n9 b
#include <linux/leds.h>0 U9 ~* D9 }: C3 O7 w
#include <linux/platform_device.h>
9 B @ @9 f: g7 x0 c7 y+ D4 a$ o6 `8 S1 w, X/ n
#include <asm/mach-types.h>
0 `1 N0 c, L4 Q4 M5 [, D, k e#include <asm/mach/arch.h>; o0 M& d0 `5 p, k( e, a
#include <mach/da8xx.h>
# X# P5 t: ?7 @, G#include <mach/mux.h>
$ D6 l5 U1 e L6 w$ L5 t; W2 L6 _
' n' |/ _, u5 r& |0 S$ G- |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 h4 E# T3 ^& a% C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 ]8 c, R- o4 u* a6 D, {, I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ Q9 B* S; v2 O5 p# d% R$ |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 g5 R Q3 z- W
. [7 d' w7 U x; Y) k/* assign the tl som board LED-GPIOs*/
0 ~7 j' @& x4 {1 V$ l! @static const short da850_evm_tl_user_led_pins[] = {+ f* Y! N1 M; O) Y% y' Z+ g" E
/* These pins are definition at <mach/mux.h> file */
7 A' ~9 c6 ?% q7 Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 v& A9 f" {9 ?: u. x6 `
-1
7 k* j- P ?8 t; p4 C};' B' j1 r1 G1 u$ r& X: M! M
9 }; R+ B7 R) K( ^4 u( {1 ]7 F) x0 qstatic struct gpio_led da850_evm_tl_leds[] = {0 c+ P# K7 n; x. q$ d
{
, U9 g- l0 _: m/ F- D+ j2 D .active_low = 0,+ d, d1 C1 |0 ?3 f; G+ l
.gpio = DA850_USER_LED0, y. M2 u3 x% ^3 ^8 P
.name = "user_led0",
# ~3 K, w0 B9 U, i .default_trigger = "default-on",
% @/ s* ]. }5 n2 p4 w },3 M% s- Z: I. y, J' f" t) Y/ u
{3 N$ v5 B7 D; f
.active_low = 0,% y- h f5 |/ h5 A5 g
.gpio = DA850_USER_LED1,$ j; K& t, `* y8 y
.name = "user_led1",
, K! ]# W2 w7 a' ? .default_trigger = "default-on",
1 C: x+ e0 V5 V( t },
5 g3 G/ G( t+ e4 A3 a5 l {2 i+ l& w2 b# h, Y: H
.active_low = 0,
+ P; U) w& O) \) Q .gpio = DA850_USER_LED2,
9 X/ ~0 @* L" y X; b5 a .name = "user_led2",
' y; x0 i* d' `4 |; f" p, u1 a .default_trigger = "default-on",
0 ~& `( S9 k: r f4 S },% `& Z. }; }% n/ a! j2 L
{: E4 G! I5 Y9 Q4 r" f4 N
.active_low = 0,
6 V/ S+ r& U2 T0 v .gpio = DA850_USER_LED3,# z) v( {( u: X2 b, r5 k8 \
.name = "user_led3",
8 \% k2 i' Q& }5 O. p/ h .default_trigger = "default-on",& J: [+ p- t0 p5 T" i1 V$ W
},& ~ g. _/ O8 O: K3 b' s, y9 c
};
, |) F2 T2 _! c, G+ L0 p( Q: n( ^' N( ~1 i1 Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 M# L: l$ ]1 z, w0 ~
.leds = da850_evm_tl_leds,5 p" V; _$ P* Q; k" n6 p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# q c! Y- j8 q: s8 v+ ~: E
};" Z2 q% w* ]8 |6 }$ ?. L; u
6 `% W$ R" T, t; e f5 q; x
static void led_dev_release(struct device *dev), \6 f8 j) ~# x
{2 F- s* G1 o$ S
};+ U0 b" m& B, i) \. {
6 G0 O2 U9 S" R1 Ystatic struct platform_device da850_evm_tl_leds_device = {( f8 ~: _% X+ l, h- o
.name = "leds-gpio",; B4 m9 a% b8 y- x+ b* C6 J. e
.id = 1," y* p0 L7 }1 m: |, _* q( w: T
.dev = {; ^+ N/ W" i+ p4 C
.platform_data = &da850_evm_tl_leds_pdata,( k. b, [" t% _7 f+ t
.release = led_dev_release,
+ _! U8 Z$ {4 Q! y( ?: n) C; f }
8 ^# P9 u: ^ v0 U( [ t$ S; i& E};
# o' v4 L5 h m, u, S M# S. ?( T3 A/ z/ ~; K1 i( Y
static int __init led_platform_init(void)
+ D3 {( u) d+ q. v, O% k" @. \{ D: d3 s+ k/ J( k
int ret;" V" a8 W- t' O- A& ^2 K0 s
#if 0
" l, q; C2 B) ^# j( ^4 _. T2 s | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 ]8 ?7 s6 C, q4 }/ ]( Z if (ret)
7 {/ `* q3 {. Z8 P8 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. r% ?6 t* M9 G2 H% G# G "%d\n", ret);) \% @, q# y, L5 D* l
#endif
- e" k$ ]7 q& P. c3 i( u ret = platform_device_register(&da850_evm_tl_leds_device);& C: s- z' k6 H; R, K
if (ret). C3 V2 n3 P5 Z: P3 A! ?' z
pr_warning("Could not register som GPIO expander LEDS");
$ {0 Y! n' |' H7 ^ }1 m else
6 j/ C! U2 [5 C& q$ ~' X! |4 S printk(KERN_INFO "LED register sucessful!\n");0 ~) H6 u! v) t# P9 j: M
; Q5 v/ c5 L' D1 y0 o1 t4 f: L return ret;8 h$ v. O: n- Q& K5 ^- z( o( {' b
}
0 J" C/ r/ e$ I& ^
& B1 S* @; ?3 P; B* b7 tstatic void __exit led_platform_exit(void)
. @1 m! [1 @% Y. P& X- D{. w$ {; V1 s& F( }! W r
platform_device_unregister(&da850_evm_tl_leds_device); Y6 A, A3 b5 p8 J) W4 e
) X2 W8 }8 }- [1 s, i, v
printk(KERN_INFO "LED unregister!\n");
$ j; B( P/ C* c! f/ p}! N* p% K6 G( _- I$ W+ z0 S
" e3 u0 L) [8 `9 T* X2 o- E& ]
module_init(led_platform_init);! W: ~' Y3 v1 u" t& ~. r& w
module_exit(led_platform_exit);
" W! B5 }1 [/ z1 i& R
7 j# p) U M. I+ N( qMODULE_DESCRIPTION("Led platform driver");
6 O" g" q3 A h4 ? NMODULE_AUTHOR("Tronlong");
' B) |8 {/ q$ z& G( |4 AMODULE_LICENSE("GPL");9 w4 ~7 S. b/ G% `
9 j8 E( R& d+ z' a. f
|
|