|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ ?) i3 V$ @' t2 h8 @: ~#include <linux/init.h>" ?4 r' ^+ y( m- n" s' V
#include <linux/module.h>( P9 D* q/ X; m6 R
#include <linux/kernel.h>3 M1 e, @1 u6 L8 m# ?
#include <linux/types.h>% g8 x' h# T! ]& t4 c
#include <linux/gpio.h>
; G8 H. ]: \ j1 B+ X* a! Z5 ~. u+ ^#include <linux/leds.h>1 Q% D" V- ?! ]. ^% I9 @9 F
#include <linux/platform_device.h>
+ ?: L4 [. I5 D$ G
- P X; n6 N9 A" T7 E6 W0 [#include <asm/mach-types.h>& j/ S' X7 a# M$ p, ~
#include <asm/mach/arch.h>
" E( t. a, Z0 U, [" u# [#include <mach/da8xx.h>3 }3 h- r! u4 p% O$ M% ?' _* R
#include <mach/mux.h>
; R7 a; K8 k! g6 B1 M* T( n; m+ u0 M1 Q( G8 ]: T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 i1 J6 H: y8 S# ^. \5 A7 Y/ Z/ {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) S6 ]8 J9 i7 M# n1 H1 Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: }3 V" Q- |, s( f n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' {2 Y+ u2 E" ? s$ h
/ J6 s+ V# h! `* Y5 k
/* assign the tl som board LED-GPIOs*/4 C- X3 X- i0 r# @+ c' W8 c# p) ^
static const short da850_evm_tl_user_led_pins[] = {
/ i3 R/ ~8 }2 _, H. e* O /* These pins are definition at <mach/mux.h> file */
5 ~0 g, T; h7 _. d$ ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 K! I2 K6 \ _9 E, J
-10 b N$ U" ` K2 M, ]8 [
};6 e3 h4 f8 l5 P5 g& r
$ o, q! a4 ^* Z# M1 b2 ]) a
static struct gpio_led da850_evm_tl_leds[] = {
' l$ w3 b1 D1 o% v9 j {5 b) s( a. \: {) I/ q e
.active_low = 0,, @& V# E) q/ h# u6 Z
.gpio = DA850_USER_LED0,
. i$ Z/ Z2 K* J0 {* c2 S% d .name = "user_led0",7 f% T" f! K. U v
.default_trigger = "default-on",- S7 L3 e2 |+ r2 S# m. n, Z
},6 W. C; o* C( W9 l
{" {$ y% x6 o/ U) c/ w
.active_low = 0,
2 F% o7 l! |5 | .gpio = DA850_USER_LED1,+ A( z# F3 i7 O& @
.name = "user_led1",9 g* q+ u* v' r% I: k( @1 a
.default_trigger = "default-on",
6 T4 Z1 e' j" G1 ^! ^1 t },
& ]5 }1 ~/ l4 |8 `4 d0 Q {8 b* z. \/ K: M0 ~
.active_low = 0,. \* P9 D7 R9 `# Y! z+ h
.gpio = DA850_USER_LED2,
1 e7 h4 @( g! S$ q .name = "user_led2",) }, z) g8 L( ]: J6 A+ A
.default_trigger = "default-on",4 v- Y" K0 T0 {3 F
},
8 B, m+ L0 Q0 r$ u3 D5 X ~ {
6 q+ P. A: F6 d0 ^, O- [' t7 b .active_low = 0,
' D0 C2 H0 @0 h .gpio = DA850_USER_LED3,: v. v2 {- X# e7 P
.name = "user_led3",
: U2 _% ]4 H( t& I' d. _ .default_trigger = "default-on", [) Z( h9 \! z; R2 v! l
},2 Z* G' y, X+ T c
};
/ z1 q* m* z) ?1 S3 B9 N3 Y' R- j' |! _8 T$ P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 r) y+ \/ f& S
.leds = da850_evm_tl_leds,: R" P% z- a5 f3 h' `! \+ U& f' `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 _ J$ }3 h, _* j8 G5 K};
; G, p+ u% O! h/ x2 r2 R- x( W8 c+ P7 H
static void led_dev_release(struct device *dev)9 g0 }- c# P% v: u! v/ f
{
# f9 z5 c; \! N: @1 Z' k% U};
+ m4 d/ f* I2 q% K8 v/ ?2 D8 b/ k. i6 j/ e- q0 ?
static struct platform_device da850_evm_tl_leds_device = {' ]# [ i( I' a# }! t3 R0 m/ s- r* V
.name = "leds-gpio",
1 q2 Y2 U$ B; E+ a ? .id = 1,
# t% u0 ^0 X! x$ l0 b' C .dev = {. k; {, `9 \, ?' ]% f3 Y0 M: a. ~9 \0 b
.platform_data = &da850_evm_tl_leds_pdata,
% F3 \) E4 f- r" Q9 N2 Y .release = led_dev_release,! t7 L: c! g1 P7 Q. [2 }3 @$ N
}- v6 o& i! A: C5 L3 ?
};0 \" H- l9 y# N2 w2 }
) S9 [% f7 y5 \; y- D2 L
static int __init led_platform_init(void)7 m4 K% O O: B/ e
{
\7 f W! c& R: w( |$ L* y int ret;4 [$ Y1 N, g7 E& W, e" {( w( l
#if 0
0 O/ ` G& Q/ o0 J2 X+ x( V0 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( x- b$ u3 u( e1 { if (ret)
+ L# }8 R$ P6 K, c* f2 P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 l+ O! J' P0 D0 I; p
"%d\n", ret);
& x# r2 Z. G& ^+ D& e1 U#endif1 i6 u7 {6 g1 n _4 W* q
ret = platform_device_register(&da850_evm_tl_leds_device);- \; E$ c# g$ [+ Q3 \% r: @
if (ret)5 \* {* S) `7 }+ I( N# d
pr_warning("Could not register som GPIO expander LEDS");+ i$ I B4 s1 o# ?' n. |+ o, q" L
else* y3 f& \- M$ B
printk(KERN_INFO "LED register sucessful!\n");
3 p/ n' s* b6 h- l
8 z. c( k. U& I4 m b return ret;$ d, o4 l2 B& ?5 F; z& y
}
0 O5 @$ G. |/ c
; f- e6 |3 Z1 {static void __exit led_platform_exit(void)
# j) [' M9 o* R4 X8 k{
7 C6 e7 v$ R% W platform_device_unregister(&da850_evm_tl_leds_device);
3 @8 t9 K6 T3 U. T6 d: o& {9 m5 X/ g
printk(KERN_INFO "LED unregister!\n");# D1 X* A( C: |
}/ [" k3 o- F8 F# u9 E; u4 k2 _
2 |7 t+ g0 @( G, wmodule_init(led_platform_init);1 @% {2 p0 l, o! t
module_exit(led_platform_exit);
4 W/ I7 j3 N: F; V
; g: o1 l9 g+ T" ]8 }MODULE_DESCRIPTION("Led platform driver");! p5 ^( F( x" e# v# f$ f
MODULE_AUTHOR("Tronlong");3 M h) ?6 M2 D3 i
MODULE_LICENSE("GPL");
( D7 D( k% Y6 x: n/ r
F0 r* ^% P( q; q4 Z1 x |
|