|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ J4 X2 ]* q' J% J; w) X r# `
#include <linux/init.h>/ b9 c8 W: D* O
#include <linux/module.h>
# d5 _9 q' b) x V#include <linux/kernel.h>
/ M* C9 p- e9 G- Z y" N- B3 W' r4 \#include <linux/types.h>2 Q d. ^2 H$ O$ \5 L6 h( j+ a
#include <linux/gpio.h>; R# }% ?9 X% {% F) x) c
#include <linux/leds.h>
8 v# y3 I7 ]" g3 `#include <linux/platform_device.h>4 L, n Y* m$ d9 g! \4 v8 n& d4 [1 \
6 y5 W) L7 M8 `- r#include <asm/mach-types.h>
" x: z4 e% k6 p y#include <asm/mach/arch.h>% Z2 T! p) ]; X$ n' o3 d
#include <mach/da8xx.h>0 {6 A7 e- I% i ?
#include <mach/mux.h>" U) K5 X6 K, N) N/ d6 Y2 l
. k: {" Y3 j5 _1 G" Z, ^4 X' ^. R8 W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& }2 A+ x: a" N$ Q$ t! x% X- k: X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 ?7 f1 q. r! I6 g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 i! k- U; ?, K7 D- }+ x7 c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) C# G4 s, p' @0 e: r2 h3 V
, M3 L! X7 u. z3 T/* assign the tl som board LED-GPIOs*/- Y$ e4 W& R3 m
static const short da850_evm_tl_user_led_pins[] = {) N2 i5 B8 q4 p1 I. a7 v
/* These pins are definition at <mach/mux.h> file */
1 r3 O p1 i& o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* s1 h$ S5 S2 r7 ` o6 r4 Z -1
& L9 b! J/ I0 d* }( \};$ f$ [+ P' X9 `6 e0 x* {/ t
" D0 a/ S% U3 ^6 ]: M2 C
static struct gpio_led da850_evm_tl_leds[] = {1 F8 e! ^7 w: x& Y A6 X
{
0 ~ ?+ l, ?! [0 n6 q .active_low = 0,3 _: M; u7 {7 `% ^/ [- J9 ~4 T! v
.gpio = DA850_USER_LED0,- I; ~: e& s7 ~# N
.name = "user_led0",
4 Z0 Q! [) p: V, [( k. q* ?9 v! Q .default_trigger = "default-on",
9 z$ c8 L( H+ Q# u$ G },+ n% b, R1 D% Y( d$ n
{
7 S0 ]8 I6 H! b! C- R2 N .active_low = 0,
- l' k4 }' }. @$ ] .gpio = DA850_USER_LED1,
! Q; y1 Z$ `' u% _ .name = "user_led1",* C4 R- x# ^ K1 S4 Z9 V* [: F
.default_trigger = "default-on",
% S: p8 i6 s+ o },
1 w$ n. \6 O7 n L; K {
2 V3 B& k' z& X9 F" v. ] B/ g, Y .active_low = 0," ^3 w1 k" a: g6 v# I
.gpio = DA850_USER_LED2,
- W, l3 I L+ E: @% c! }0 c }/ F .name = "user_led2",
3 {# k' D" V) n$ o7 q .default_trigger = "default-on",/ ~. O$ G2 {# x8 y- ]- B }0 `
},: ]% s8 y, _; G0 [$ p) e
{, J; C5 Y' v; W. L
.active_low = 0,
$ ]- l7 Y7 [1 h .gpio = DA850_USER_LED3,6 ^0 |1 W) q$ b* w+ N# D
.name = "user_led3",4 k3 m. N; @" g* }
.default_trigger = "default-on",
* j1 m( ?5 T7 L+ C+ a! \0 [# D },
* P5 T# O( g' y! d* _$ F6 @};9 h& u! i2 Q- [. D7 f* \2 L
3 s3 m0 {4 z9 ]8 o" Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 b4 }; R2 Q# x1 J .leds = da850_evm_tl_leds,
3 ? c- p3 c" a1 N z" p2 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- x0 r) i5 `4 K+ \
};
# m" N. m6 |, V- p8 i
8 X, A2 [' G. A. g1 T4 kstatic void led_dev_release(struct device *dev)
$ D$ W! k F2 a+ T9 ~{8 k4 f4 Z) p- h
};' g! v e1 p! b, ]
/ I/ X+ G B- [3 t' p' M, P" ustatic struct platform_device da850_evm_tl_leds_device = {. o r* H5 F# E. I9 W7 X e
.name = "leds-gpio",
! W! J' C \: _ S, M7 y) O/ p .id = 1,
( x0 q1 u* Q# }. L7 q .dev = {# p: _/ |! K6 e+ d$ T: L
.platform_data = &da850_evm_tl_leds_pdata,6 q9 W& _. V0 {% Y5 [# h
.release = led_dev_release,
( v0 q5 T( c9 ?3 u5 V1 ~ }
% y# d# p' B6 {3 l6 T4 h};6 z+ `& ]6 |2 R( D/ ^# |# o
/ n( _: e" [9 o/ } `* X5 Y( |) _2 h4 k
static int __init led_platform_init(void)
" \0 {! n# f8 Q{
9 h1 i" ]$ {* g/ s: e7 ~ int ret;
1 L5 ~2 A, [3 m9 ?( Y* h#if 0
p8 d6 J' B. s0 e: ` s/ ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% _" _9 n+ K7 M$ {! l9 N
if (ret)
! s4 \2 ]" H$ L/ [7 _& H8 P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 }" [8 b, k; u, ~1 x; c; M "%d\n", ret);
, \3 P1 Z; b6 a4 C( }#endif
0 f, `5 S4 V; l+ B+ { ret = platform_device_register(&da850_evm_tl_leds_device);! O! ~# N/ E. N# h2 Q/ e3 |! j
if (ret); n8 i+ D3 f* T9 N o9 [% i
pr_warning("Could not register som GPIO expander LEDS");
. f7 j, ]* T; c else
; Y6 s# J! p& r/ R* V printk(KERN_INFO "LED register sucessful!\n");
& i+ o) J' U+ L
q2 F* Z3 W$ x& r! n8 j3 B return ret;1 V5 s7 j& R0 Q( x
}
0 M4 z6 X2 J) {+ o; X$ V% v2 S5 r+ e! W. H
static void __exit led_platform_exit(void)' s# o; r& X2 e. K
{
+ I$ C8 J. B/ X+ ` platform_device_unregister(&da850_evm_tl_leds_device);
* E% `* S% d+ a0 F2 w( c" Q/ {: y: m0 g
printk(KERN_INFO "LED unregister!\n");
; f& T+ ]! c) ^* ~4 E8 r}9 T8 u" Q- k% ]/ w: Q
- b/ o* D" x, r' lmodule_init(led_platform_init);; c" q m0 o# w7 m+ N
module_exit(led_platform_exit);
" u# T6 J7 g! u
8 s; j/ R% s+ Q& ?MODULE_DESCRIPTION("Led platform driver");; L5 P, h0 j2 C4 V4 v4 y+ p8 F4 Q
MODULE_AUTHOR("Tronlong");" x/ y) f5 n! C$ G" m" o; r
MODULE_LICENSE("GPL");
6 W; p, D, v( D& p$ b
/ q1 P! V9 {2 Q, _3 a |
|