|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* q& A, v. ]4 z, V7 Q0 E1 y
#include <linux/init.h>0 ]! G2 r# _! B# S: e$ S0 }
#include <linux/module.h>
) r8 f/ d4 X3 x- V' }9 P#include <linux/kernel.h>
6 R. k5 A) H0 F* S0 s1 Y#include <linux/types.h>
& i" I+ V: V$ @3 F#include <linux/gpio.h>1 O( j) t; X/ ~9 {
#include <linux/leds.h>4 T/ T( K' {) J5 U2 j
#include <linux/platform_device.h>: e8 g) b& b3 d# G3 \
5 l3 Y/ l% ^$ c( C" `& Y
#include <asm/mach-types.h>* x, @( R0 |( P0 ~$ @
#include <asm/mach/arch.h>
4 R5 P' q8 g2 @/ k. }#include <mach/da8xx.h>/ x f) Q4 {* r4 ?" q
#include <mach/mux.h>
/ k, d9 q. f7 k8 ^. K
+ @1 L' j$ w7 |5 P1 k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* c$ Z3 a, t6 Y$ |+ a3 j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ W! F, K! o9 M/ H, D% M" }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: g% |# d3 f& U; A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 p, I+ F* G6 V2 k r- R7 p) {
# }! ^. j# J7 t. G" D8 ]% ]: |/* assign the tl som board LED-GPIOs*/, k! U# \! s) ~+ Z: l1 ^4 ?
static const short da850_evm_tl_user_led_pins[] = {' y) ~: W) H) T& ^( m
/* These pins are definition at <mach/mux.h> file */- D5 Q! Y2 n7 P% Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 k3 W: v, x3 L, F7 h! M/ U -1
M8 E$ k+ y8 W+ J7 I8 D};
8 V! [; p; l4 p: ^2 }- U' S) P: Q) l; H# Z- @. X4 Z
static struct gpio_led da850_evm_tl_leds[] = {
7 `3 n' j& [2 G5 q5 B" F7 y {6 B+ _. p0 Y4 |+ {8 A3 N2 A
.active_low = 0,$ R( m3 U& C) K2 T. `% f
.gpio = DA850_USER_LED0,, X) A9 i+ W3 a: x$ F# u
.name = "user_led0",
2 c/ _- b4 y+ g .default_trigger = "default-on",( T2 r) O# }# U- z) F( t
},) Z5 v8 L, ?. G: I) ~. d" \
{
: z1 c2 A! k' _. q .active_low = 0,
/ C* I% {. ]1 _, g( g .gpio = DA850_USER_LED1,
: w; S$ {" J1 y" C p9 p .name = "user_led1",
% y% f! g; g& O- Z .default_trigger = "default-on",8 Z }3 M, Z7 S0 ]- A0 q
},
8 k- `2 N0 e. Y% Y* U6 w# B, n( Y {
8 {* k: D; J. x4 Z2 r .active_low = 0,
% F7 A- z1 y. I; P; j .gpio = DA850_USER_LED2,
% G% j4 A9 [, _& `$ p .name = "user_led2",
+ G1 s/ Y. F, K) \' Y .default_trigger = "default-on",
' P5 T. }, ] b/ I9 m& d/ s },5 n9 M. h i, t1 G; r3 `
{
8 n0 {# r& y! S2 [4 I5 c/ F3 d .active_low = 0,
& E1 U& I5 g2 e: g7 f( p3 u .gpio = DA850_USER_LED3,
4 Q9 L8 r- `- I9 E4 z g1 C% Y .name = "user_led3", {5 _$ P/ h, p& u0 `" e' c7 ]
.default_trigger = "default-on",5 }* j8 f2 {) u8 L
},6 \ R& v7 F/ N! l! y7 d) u# B) U" Y" p
};( Y- Q4 s6 q1 O1 c! Q2 H
4 B7 \( k. K+ y/ h- Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& Z3 v+ c- K5 J, a4 W; Q3 ~ .leds = da850_evm_tl_leds,( E# a) }7 @# o$ _3 _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," F7 P2 W3 X# g" ]: u& o
};
- Q. O! T! q) Y' c% w% k; N, |0 K- Z% a, h
static void led_dev_release(struct device *dev)
* d" ^& k4 {0 W5 i{& I* T% `5 Q( Z4 m/ B& Q9 ]
};
% H0 ]1 N0 [$ u/ L
: j# K9 H4 Z0 [5 n8 {static struct platform_device da850_evm_tl_leds_device = {% R. b+ M1 J( v8 a5 n6 i
.name = "leds-gpio"," I# m% u% S9 m6 A1 z. L# T
.id = 1," w5 G8 M0 ?& b6 v9 X' z
.dev = {' S) J8 v$ |2 u
.platform_data = &da850_evm_tl_leds_pdata,/ f. b2 v9 Q4 |' v( B5 K; ?
.release = led_dev_release,% B' P2 ]) p1 ` ~
}
3 l% J+ c! r# @; x2 H};
; Y' U" W5 {# i2 t& _; q$ z+ X, X2 ^ Q! l1 r" Q+ n: [, d, u0 L
static int __init led_platform_init(void)
- r5 W3 _+ {! C8 ?{0 |: u! ` Q. C+ P- B( c
int ret;
( c2 j& q7 h, D! t4 w% a#if 0
/ C' z0 I4 ~3 r) r( g+ B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ I" f# A+ b Z' l1 n4 F if (ret)* a1 @# {% D' v7 Y, ]9 F5 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 h/ M4 o2 e( o, E% Y) {
"%d\n", ret);; M+ Z7 o3 ?5 s/ Y
#endif
. y! C* r+ t" n: r' m ret = platform_device_register(&da850_evm_tl_leds_device);
8 s' _! j( o' q if (ret)
9 b9 R- w: ] K* D pr_warning("Could not register som GPIO expander LEDS");, K* k+ y* X2 S
else3 U3 O+ x+ }5 j% l' ~
printk(KERN_INFO "LED register sucessful!\n");' _- w% c. E( X- s$ Y
8 d/ D4 o& J0 m' {. [- a" C5 `) h
return ret;1 z6 H4 Y% A, |) Y/ l' y. d
}8 z) W' J% y2 w b0 m
6 k3 q4 V$ |4 l/ X0 D4 Xstatic void __exit led_platform_exit(void)
4 b# O1 c0 l' h{
' p- Y6 k6 j' D, d platform_device_unregister(&da850_evm_tl_leds_device);
2 d. f F8 z3 ~ U5 J# m+ h9 j) S+ ^' D
printk(KERN_INFO "LED unregister!\n");
; `9 W- t7 @5 m- X+ s: _2 A}0 y4 [# D) }# J! {4 r1 I, y$ ~$ T# `
8 U. E' _7 h% E6 g& P
module_init(led_platform_init);
6 k) R4 M& g2 }/ E* jmodule_exit(led_platform_exit);+ O" r4 H, t, z- Y- C5 q
% N2 S3 }9 A5 ~5 f$ C. Y5 IMODULE_DESCRIPTION("Led platform driver");* r8 s- M7 K; i" J
MODULE_AUTHOR("Tronlong");
" M( E, ^: e- ]% G; yMODULE_LICENSE("GPL");% }$ d8 J* |$ ~7 R/ N, K# s& u
6 ?6 s0 f6 g9 _: K5 X3 ` x |
|