|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 N- n e" B' d. L/ \
#include <linux/init.h>! ]7 B5 k2 q' a' g7 I5 G B
#include <linux/module.h>
1 ?' k/ L2 Y( Q( T" V5 v6 E& L# L0 j, N#include <linux/kernel.h>
! J! F1 y+ q6 ]# n: Y#include <linux/types.h>% ]( a5 O v7 u7 {+ H
#include <linux/gpio.h>1 ]6 V; B+ K r# @, |6 N
#include <linux/leds.h>
' Q3 D( ]% J. _" ?, u2 e* k#include <linux/platform_device.h>1 m) o+ K. n' y
1 @+ l9 b ^& I {7 @8 k
#include <asm/mach-types.h>0 u5 |0 B7 I! ] B1 c
#include <asm/mach/arch.h>
# Z' i- N6 O: x, d9 E4 Z, |#include <mach/da8xx.h>
2 ^6 V* ^, Q& u2 t |: n#include <mach/mux.h>
" M4 u* u$ y \7 K; B. [7 x6 n/ n5 P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& _. l+ o8 p3 g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 h- |0 _2 @5 K5 H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ q9 n5 j3 l7 O4 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 \# W/ T9 f' m' N2 h
2 Y! |# m2 E; l4 F }* S
/* assign the tl som board LED-GPIOs*/
s+ v" e( A' k; estatic const short da850_evm_tl_user_led_pins[] = {
4 Z3 H) d, d1 T# E& J /* These pins are definition at <mach/mux.h> file */
: b+ z; ]& \( o( B1 {8 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 |/ w6 ?# F, f2 g2 B
-1
& ?$ \# {* X, p};
1 S; D: k; n! L& D% B+ H$ V D
+ e7 Q+ j- P5 Z# ` |0 c8 wstatic struct gpio_led da850_evm_tl_leds[] = {" g* |3 |$ C0 e% y# p$ T- y
{
! M/ V7 W# a0 W5 X" v% ]) h .active_low = 0,8 R" z) G @* I* x& J, M+ D
.gpio = DA850_USER_LED0,/ @6 z- z9 P& P6 [% s& R7 @7 u
.name = "user_led0",$ a' F' P- S% Z
.default_trigger = "default-on",
; o$ t. \8 l& j/ n _' q },) I! P8 f/ ^4 x
{6 h( ~- x3 A3 r
.active_low = 0,
! o# e5 F: _: [& e .gpio = DA850_USER_LED1,
0 x. k5 h1 x& z% A* m* F" P .name = "user_led1",
+ ~5 B/ D8 u% D% h9 ?% }. J .default_trigger = "default-on",# f, ^& A5 L9 }4 r8 N/ o" k
},
+ p) Y. B* Q! x; T3 M' R( p {
9 ~0 @4 g0 h/ D& O .active_low = 0,
! G+ C" F) G2 I. L .gpio = DA850_USER_LED2,3 x/ P6 v! ]% U
.name = "user_led2",
3 t2 e7 g" G6 V6 z .default_trigger = "default-on"," p! U4 k* t# k6 k9 r; g+ n S6 t
},% J4 ]+ N' e5 P. a q! p
{2 t- G# c! K; b
.active_low = 0,
( x6 G, m4 Y4 q .gpio = DA850_USER_LED3,
8 n4 u& u! m" m8 S D# n .name = "user_led3",, g$ Q3 i+ P: X( O1 S2 t7 o
.default_trigger = "default-on",: h4 {+ Z' Y0 B, X
},
6 d" @- ^+ [1 L) l4 b& M) B};+ c6 o# S5 O2 q- L& v
" J+ H+ q) ]4 c9 k. E$ S5 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ Q j9 f' W% m! S P2 ^ .leds = da850_evm_tl_leds,
8 u( z/ f& I8 X. N( j- x: Y# `( S. A0 j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* D( Q" G$ A: v7 H; |' c2 V! j};
}& J5 O) N) _8 s# @' R/ h; Z/ o# s" d0 |* L% A( |
static void led_dev_release(struct device *dev)
0 t8 Y* G( @9 I) Z' x{
7 o( O- i5 L* S; C% G7 i};
5 Z% S& s: r/ z, T1 ]- w) }! w& o; Z3 ]% {, Y- a/ w, o+ f' t+ z2 u
static struct platform_device da850_evm_tl_leds_device = {
2 h; [2 ^4 O5 Z% Y& \- h .name = "leds-gpio",
7 O2 }* _: s, Q# r7 R# j; B- ] .id = 1,9 l* b* ^7 \' O/ C! E% L( R
.dev = { o9 X, R) w" \# ~7 Z. N3 i4 S
.platform_data = &da850_evm_tl_leds_pdata,
: _% V5 R) Q1 N .release = led_dev_release,1 \ O T; Y X5 f* J: V
}! q" W7 A9 o2 _
};
: V* F# B. }& O2 N& z$ @5 S7 r8 o8 ] ?- y
static int __init led_platform_init(void)
u3 q1 B3 u( h; P8 w{
: O0 `. W0 h. V% d! d' y/ W+ W. |; V* G int ret;: b2 p! c/ g7 w4 J# \% o
#if 0' Z- ]# A6 ]. q* [/ Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 `' O8 U! U, c' K. C0 l5 D
if (ret)
9 \& ]9 O$ S2 I* j8 ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 ?: c$ F( g( P& s
"%d\n", ret);
+ i+ j9 r7 m7 w6 N" g/ J2 z#endif( b+ T+ o& o' h$ i! {# O
ret = platform_device_register(&da850_evm_tl_leds_device);- x0 F5 l# F6 F* Y7 U0 F: X/ j
if (ret)
3 V% S* ?0 i% r pr_warning("Could not register som GPIO expander LEDS");# ^8 a+ l+ J% O* C z8 [
else% _# E* A: G! l2 \/ G+ L# ~
printk(KERN_INFO "LED register sucessful!\n");0 S! l0 a1 f% t- H) t8 R
# K( @7 s$ ?; d [1 C) {7 M return ret;
4 A) S, R, J, E* ~}! }$ v! i3 C. P0 X' s
3 |8 ^1 l" Z. P6 k' `4 w
static void __exit led_platform_exit(void)
9 k3 p' j, a D{( ?7 b- ]9 z$ P d6 g$ ]) K
platform_device_unregister(&da850_evm_tl_leds_device);! j# x5 ^1 U7 o$ j2 u; Q
, r3 u0 N4 p6 B) {: r
printk(KERN_INFO "LED unregister!\n");
) `% r# l# F; i3 T}( o# X0 p* T: S- u, x; |: l! b1 r9 F
/ `# N( i6 j6 w/ f6 m8 smodule_init(led_platform_init);% E$ J' _' f* K1 Y0 H3 N
module_exit(led_platform_exit);
) B) k$ J U, E1 O4 T0 \# w4 v$ f! r h6 {* b$ I
MODULE_DESCRIPTION("Led platform driver");& K8 {4 Q/ ^/ n- `; @, b3 o
MODULE_AUTHOR("Tronlong");
( D9 z& w3 Q0 E) U3 [MODULE_LICENSE("GPL");; k1 D0 g/ ~0 @$ W" f6 O
9 D% |1 i% {" y! X |
|