|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ W: G* V; L4 g! c" @$ L#include <linux/init.h>
; ^2 {2 |: r* _% g j6 i$ ]- r+ ]" Y#include <linux/module.h>' D: [3 E) U8 M4 x' b* z% u7 Y: `
#include <linux/kernel.h>4 p* M8 _6 N/ ~) P9 ^- v5 k
#include <linux/types.h>0 G- ^% ^$ `- S j- C. m! }
#include <linux/gpio.h>1 z4 X' r; M! V; a8 @+ o
#include <linux/leds.h>
* ^8 a. v* b/ w- K& Z& c0 \#include <linux/platform_device.h>
5 F7 i* t1 l, f+ ?1 @2 a3 {, W
) U# \0 p9 L& Q6 p, I- V! q#include <asm/mach-types.h>
! g t! R6 Y3 f9 \! E#include <asm/mach/arch.h>
5 P4 B) j: {7 R" `9 l. G4 _) Z#include <mach/da8xx.h>
# g% _% Q) @& a! W+ u6 P, X#include <mach/mux.h>, X. }+ Z8 C+ ^8 L0 A4 A# S
% ^6 q# Q; j3 \& c, O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- m/ F( b3 }, g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) K) ~: g& C5 f7 O0 U+ i5 }0 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" w( v7 d1 @1 m9 a) z7 {2 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 y: ~6 g) @9 W( o8 i: q9 F( u
: [3 [$ ^4 B2 U0 u0 g/* assign the tl som board LED-GPIOs*/
! ~) V* K) [) T U# o1 |7 Lstatic const short da850_evm_tl_user_led_pins[] = {
. C& }! m5 h- E% N7 e" \ /* These pins are definition at <mach/mux.h> file */
! x& Q" g4 o- A! ] F2 D, f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ J2 P8 n W% X" k/ P
-1# D8 c, i) B1 Y: z% F1 \
};- h, B# q% ]" |" l
: F' H5 Y5 N& F+ a2 w$ ^9 |5 Istatic struct gpio_led da850_evm_tl_leds[] = {
5 E6 r4 m8 p$ y6 u# ~5 t {% ~& |3 u7 Z# Q& G- W) l: s( ?
.active_low = 0,- S; j- t" \4 i; O
.gpio = DA850_USER_LED0,
% j5 k ~: F: D' Y9 Y .name = "user_led0"," \; Z0 G$ \3 v0 _
.default_trigger = "default-on"," ?( g/ Y3 f' `% B1 j9 V% I; z
},
" J; R! z$ x9 R( g4 L1 `; D {! _& o8 g, l4 C$ O) J' p& O% u
.active_low = 0,9 z1 E# y/ m+ l
.gpio = DA850_USER_LED1,
! n# N1 |, J2 I7 q( a .name = "user_led1",
! Y R I0 E% D8 A+ X. p* ? .default_trigger = "default-on",
. M' A. ^ k3 f& v5 H' D },2 P7 `/ K7 K8 S* M' R6 q5 a
{
; Q# ]' v* Q( p9 V, X .active_low = 0,/ n2 w) P7 Q W9 k# e+ G" T
.gpio = DA850_USER_LED2,
# y& \" c; O. ^- Q; }2 I) r .name = "user_led2",
?3 }' u& W O1 j0 b .default_trigger = "default-on",
9 j9 j' N; ]3 Q' |# q },+ z: L6 c$ q' M0 K7 C, }! h& \
{
3 _4 [8 m) O9 N4 u .active_low = 0,0 h& a7 t: m$ q% b
.gpio = DA850_USER_LED3,
, t* A- l: Z( C1 o# ] r7 F .name = "user_led3",
, u: x/ o9 }6 |2 B: T& i$ l7 @9 w .default_trigger = "default-on",/ n, F# b& j9 n! [8 d( W
},
8 \( Z9 a J- M+ _" `/ u};. ^! N$ ?: v/ u! f6 ?$ O
) X: E- v0 P1 |# a3 B1 r2 c. ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 M9 J) W7 U N, i: K
.leds = da850_evm_tl_leds,$ R" B5 E+ q* ]& W# C: X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. i9 d# O9 x- t2 C a};1 L7 A0 H% Z4 I
" ^5 v1 A4 } d4 ^6 R( N, U. |static void led_dev_release(struct device *dev)( l/ w! H8 p7 _$ w7 ]( @
{0 C* r& [- D: w) I
};
4 X& l- H [ o$ |% m! F+ H* y0 u/ |* \" Q
static struct platform_device da850_evm_tl_leds_device = {, k/ C! `& b5 b0 W
.name = "leds-gpio",6 z! d7 x0 T- r' } p- Z! r
.id = 1,
) k- q, i# k4 v9 R" J7 } .dev = {
5 b, }1 n" E+ q1 d( w* |+ U9 | .platform_data = &da850_evm_tl_leds_pdata,
3 G P% q; S6 R) ^ .release = led_dev_release,
6 L- I3 {& ]7 b5 h# \" n6 g4 o }
) ?2 L$ u4 l: u3 Q6 X- X# O};
' B/ u" A$ v2 T+ S8 T, N% a
, Q/ I) }5 H$ x) F6 Xstatic int __init led_platform_init(void)
7 f" W: d1 W" U! p! `1 Q$ }{' ^( d# F- _ c1 X" p( t- D
int ret;7 Y& z% C) X6 j+ G2 l- ]
#if 0* @0 o7 R$ \# `$ u- ]# i' y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& q6 M' X; w! e$ e0 ?, b+ m$ Y
if (ret)% r0 R- `) E1 Q4 A: c" R& M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 p; J- g( M$ ^
"%d\n", ret);
+ b& ^/ e" _( E; a( [% C( G9 v#endif
6 x: W0 ~8 x5 _0 M ret = platform_device_register(&da850_evm_tl_leds_device);
' ^9 S, z- N K+ M3 q: u0 J if (ret)
8 T4 e% a( L6 N. g+ c pr_warning("Could not register som GPIO expander LEDS");
. { n0 I# w( \5 a9 I5 u else
" E7 y/ Y9 e, g* r k) H printk(KERN_INFO "LED register sucessful!\n");
- R5 u3 y$ Z6 A( a3 N F+ T
! F& [5 \9 K4 _ K1 o return ret;: f: V7 o( j$ Z/ U& Z
}
/ y+ q. F" K6 g' H1 l0 f
6 t$ r+ P9 s+ G. {* Cstatic void __exit led_platform_exit(void)
k* @1 x, }0 S{1 J. l/ Y8 q/ G. N
platform_device_unregister(&da850_evm_tl_leds_device);
z8 h* I& E- k a, Z$ ~% o
) g; j3 u" B+ A3 ]: ` printk(KERN_INFO "LED unregister!\n");
5 G/ k) Q4 z. l$ t8 i( ]0 S}! y1 Z- C$ N# d9 x$ g# x
6 A& Q7 J& S1 `* G7 pmodule_init(led_platform_init);
, ]6 j# ^# @8 B! r2 Zmodule_exit(led_platform_exit);( A$ R; z4 P6 A2 ~5 W0 F. r \
/ K H" O- f! N5 c6 t; c: W( N. MMODULE_DESCRIPTION("Led platform driver");5 J# j' b! L+ Z: T* p
MODULE_AUTHOR("Tronlong");
$ {, r1 N$ I; s9 }0 AMODULE_LICENSE("GPL");
S& i* M( B. |! N' y
9 @( [( k( z3 S. f- b' u/ T* V2 t4 C |
|