|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ |* |; d2 Y( F! Z
#include <linux/init.h>1 ?3 [$ J2 A; Y; M' w5 E
#include <linux/module.h>
9 B, |6 p) w5 T; F7 n#include <linux/kernel.h>
% @9 O5 ^ e7 B6 \#include <linux/types.h>* Q, [2 F0 L0 w+ }) U" M% F
#include <linux/gpio.h>
. B( W- k! ^8 u0 l#include <linux/leds.h>0 X7 T, `( r# f, r2 W. m
#include <linux/platform_device.h>& `4 y, ^% s3 D& E
3 ^# h$ u V/ g! U8 I#include <asm/mach-types.h>
, F2 X& F: r# m8 n/ ^, @% S#include <asm/mach/arch.h> f" H# V7 i+ @
#include <mach/da8xx.h># B; _1 S) Z1 b a5 s8 w
#include <mach/mux.h>- P; J& n! p( R) A
8 l5 X* ~; l6 c; M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 n9 g- Z6 N, \6 F( \2 f' l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. G0 e, E7 u. ~2 v- v* k3 h5 }& b- R, s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 j6 `( k& x& v/ b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! Q4 u( v. O) A/ _
0 V D/ C. Q2 Y( C! v* |" g' z/* assign the tl som board LED-GPIOs*/
8 ~- @1 p/ {5 q: j$ A3 _, Qstatic const short da850_evm_tl_user_led_pins[] = {
" Z7 Z5 [1 m$ N4 ?" z7 G: u0 o /* These pins are definition at <mach/mux.h> file */
6 e' J" ? {8 V. s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* k" B: P# _2 v ]
-1
% L" Z9 v/ P2 B+ p! \};
& ^' e4 n% I1 I" @. d
! j6 Z- {. @1 ?, `static struct gpio_led da850_evm_tl_leds[] = {
) x( v8 k, M6 j) G& \. } {
: n7 t7 [) C: j .active_low = 0,
3 S6 {5 H* W @- S1 R. M( [1 Z5 I .gpio = DA850_USER_LED0,0 D* z: G/ N q8 h, }9 B
.name = "user_led0",/ B, c" G( @- ~: v1 g( Y
.default_trigger = "default-on",
8 k4 y# f" E; t" i6 h. P; y0 T },, Z% V6 o4 x! O& b0 a
{3 s$ N/ G; `: a" C
.active_low = 0,( H; y. }% J# w8 \0 |( D
.gpio = DA850_USER_LED1," }/ o% a; m+ K
.name = "user_led1",
% }+ U2 [( v- W9 [6 ?7 o .default_trigger = "default-on",
+ K+ V/ V4 o( H) s+ G! A. p },# S! Q8 j X* L# N9 _
{
' I5 k3 P. t; T2 E8 A$ @/ E$ N: l2 i2 a .active_low = 0,* K& _; n4 L8 d8 ~9 V
.gpio = DA850_USER_LED2,
) F2 P; K( @: c: ^ .name = "user_led2",7 f' R" V7 R9 ^( _
.default_trigger = "default-on",7 U- I6 b( g# e3 R* V
},1 a% J! g$ f, N# K7 _
{4 u; i5 F1 L2 [, o
.active_low = 0,
' ^+ q! r. d% b+ A5 S" y .gpio = DA850_USER_LED3,1 j" g. {8 i4 k1 h
.name = "user_led3",
# ]# F! t# m0 I ?/ M3 W .default_trigger = "default-on",
3 n, \( ]! \* Q# | }," I5 L% q9 F/ x! k
};4 B4 [0 J/ {8 I$ I, Z$ V6 P6 j
! t. I* j5 q9 _% q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* ]! d2 Z8 {8 A: w .leds = da850_evm_tl_leds,- i5 X8 A& y) k' f" J- v% k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 B, P T. V; a};
; E# ~) S; I) i" F' X; t8 J+ _1 a2 I: S2 I$ l% h
static void led_dev_release(struct device *dev)9 m% p% J, j& m+ L
{
$ O% I: T% G2 H; q! ~2 ^2 q};
' G2 u- c Q" x% }0 y$ x) v: ^5 _) p7 [
static struct platform_device da850_evm_tl_leds_device = {
* [% P0 z+ s) Z. c" P. a .name = "leds-gpio",' L- m( C4 A& _) M; Q
.id = 1,
; T4 X0 J0 \: D+ u) d3 @ .dev = {
0 M G* S% |# D .platform_data = &da850_evm_tl_leds_pdata,7 E+ o- l( T" z& P0 u; U' T; S7 F
.release = led_dev_release,
3 s/ [* U! S2 Q9 @3 i }
# `3 v# d3 `3 q6 X};+ X% {) w& I( |5 F y; @* B
* H+ q: m& `6 S2 H6 i8 J0 Wstatic int __init led_platform_init(void)
d& l" B0 U/ c* j5 \6 a2 G{( h% |$ T }- T- C, B" _2 v
int ret;
0 J' i7 ?0 [, I a" T! V#if 0% y _5 c& F' T# Z1 H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 O" n. H8 P( j/ a if (ret)
5 U4 U! W0 J- _; Z6 p% W5 Q4 U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ j1 U. {4 t7 z: f( D4 A
"%d\n", ret);5 `4 z M# G8 |% b$ I+ g9 f
#endif- O. C1 p' ]: j' b# N; o5 r
ret = platform_device_register(&da850_evm_tl_leds_device);
; q# J/ Q9 H0 b6 I5 i if (ret)' f, }; E6 o9 h
pr_warning("Could not register som GPIO expander LEDS");* d7 U# v1 y1 Y1 \- x+ b3 g* h6 I
else- c5 R/ j; `5 ^$ w
printk(KERN_INFO "LED register sucessful!\n");# z7 n/ X3 ^0 R- {" v4 a% H
& i3 T$ p9 x, ?' m$ W
return ret;
9 e) {! c- m6 i. J! Z}7 L7 Q+ k7 g1 ?) G
1 S- o( W. a3 r, Q- H" t& R
static void __exit led_platform_exit(void)& {3 Z" { o5 J' I
{6 F- V& @ W+ R8 c% ]+ H5 [" u
platform_device_unregister(&da850_evm_tl_leds_device);
" b" O) |, g0 E& {/ Z/ f
: R) h o2 [4 P0 D A- e$ Z5 Y0 v* p printk(KERN_INFO "LED unregister!\n");
; w/ j# L1 f, M% N5 c}
/ l& n' O3 A- {$ I/ E( H" Z2 w5 L4 a F
module_init(led_platform_init);- P6 X+ l8 v8 ?2 {, p
module_exit(led_platform_exit);
1 q( r! V2 R3 L3 ]6 ?) @6 e+ q$ p8 A1 Y! _" s% d% o
MODULE_DESCRIPTION("Led platform driver");
' Q$ A8 W9 J2 @- z: [, E# h2 Z6 x, DMODULE_AUTHOR("Tronlong");0 u) [: I9 M$ j
MODULE_LICENSE("GPL");
& c, Q# y3 I9 L: v8 U# Y, Q+ n+ I9 f1 v% I7 m! ^: M' X
|
|