|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 ~; b: ?5 x# q% P- _#include <linux/init.h>
7 L, @# A" t( ~* v; V0 N Y1 Q) A#include <linux/module.h>6 v8 y5 {) s B: m
#include <linux/kernel.h># H& X$ [- i5 g- m% J
#include <linux/types.h>! A {! |' {# V \1 C
#include <linux/gpio.h>' z9 V* z3 S5 i. Q6 Y2 q
#include <linux/leds.h>
) j7 V& M- p; p1 T, {# L#include <linux/platform_device.h>
/ M, q9 A) F" F+ K2 p0 d9 H7 h$ `) k( V7 D9 P5 e7 t6 l) c
#include <asm/mach-types.h>7 \; \, N' i8 g* ]
#include <asm/mach/arch.h>
x9 {" v2 a# \" q0 v#include <mach/da8xx.h>
/ w$ _. }. w7 c; L8 r3 I' r#include <mach/mux.h>7 @2 }: R3 e0 q* w
3 a8 j1 c; I) G, K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 C4 @0 f! M* X) I0 J7 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ ^+ r6 \, Y1 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ u$ [- y7 M3 @# ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) w" R- J% T- [8 _- b& a" }
" i J8 {) @/ P* h/* assign the tl som board LED-GPIOs*/
3 H9 h$ ?- W$ H+ h# @: ?+ C$ Mstatic const short da850_evm_tl_user_led_pins[] = {. G# C" Z6 \0 [' Q; W) g( e
/* These pins are definition at <mach/mux.h> file *// d3 l/ g, W7 f" _1 s ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) j0 P; S6 Q N -1
3 p! X* x' s3 K% }4 g};% u2 O2 G& q, v/ Q
# I9 M# P( p4 s2 Q8 f7 P- }static struct gpio_led da850_evm_tl_leds[] = {
5 K& k) h z7 x {' t6 j9 C |7 Z( D; A
.active_low = 0,* H4 S. D/ ?; V
.gpio = DA850_USER_LED0,
0 i" |) t7 p' X7 L% Q .name = "user_led0",
2 c! @8 Z% u F% o. y' y .default_trigger = "default-on",' U& p- u; |# U" E( j
},. c; d4 H" D! [1 d) W. Q% ^9 t8 F
{$ l6 h- W6 o S9 V) |2 H- T4 t
.active_low = 0,
1 K5 x! `3 V9 _$ C$ \ .gpio = DA850_USER_LED1,
+ n0 K$ ]( l4 M# q) P .name = "user_led1",
/ N! e* n7 I: [) w" ]3 W+ W* G .default_trigger = "default-on",% q- |( B; B9 p; ?1 _4 F
},4 Y$ `8 a( G6 o8 _% c
{
2 c. V( n7 B$ F T2 j+ H .active_low = 0," Y2 f9 a5 w1 Z( H
.gpio = DA850_USER_LED2,+ j# U2 u" Y) ?6 U. B( J& Q. X
.name = "user_led2",
- C% a7 Y/ s- s; |% y .default_trigger = "default-on",
! b2 P% O* O: s3 V },
2 r3 y" l0 B V1 j Z" l5 g {
9 z [( r7 [0 H5 t .active_low = 0,
9 f: L, C/ A2 U+ c9 E4 N .gpio = DA850_USER_LED3,( ~/ {* T( U( p* W0 Y. v3 F
.name = "user_led3",
( ~, H$ p4 u* v3 `2 M& C# W1 O .default_trigger = "default-on",
6 }7 R# j7 }& u },
; {1 u: p7 F3 E2 W1 [' M};; M' A6 \& @& n
; z( {6 m, i# S& g, U ~ t% ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. A& E: c# w8 p; W% t/ m0 r
.leds = da850_evm_tl_leds,
`2 q/ [) G0 I) a) s& ~' a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# S+ \3 [' o2 I, n* a
};5 u( W# W/ m0 }- O* k
" v9 i' h0 I8 R: o6 Q2 @2 P4 V
static void led_dev_release(struct device *dev): G3 \+ ~# ?" b( O' O" d
{
! u6 [6 w" R M; G, A7 j" ^0 m, d};6 l$ P% ~! R. A9 j, |
3 M6 H$ _# A, G3 |& x4 wstatic struct platform_device da850_evm_tl_leds_device = {
. L9 J v) q+ ~% U .name = "leds-gpio"," y- \4 X- x* f# b- O) v, ?
.id = 1,# q ~: A6 r, i+ I g& L
.dev = {8 W/ x0 _6 n& d) C+ \+ L
.platform_data = &da850_evm_tl_leds_pdata,
. M3 M+ l7 G- N* G( X8 P3 I& u7 \+ P .release = led_dev_release,
/ Z# t" o# i; v/ f: R& d3 c }
, r0 z/ q. ]' ~" e: ^};- w& G0 T; C9 t, C; S3 Y/ s
" p+ x' P$ i4 u6 E, X5 r7 O6 B) p
static int __init led_platform_init(void)
6 w6 t. l8 w$ O" H/ x{
! ]# s8 Z3 s6 w$ | int ret;9 Z- R$ C; I3 u: S; v3 Z
#if 0! G4 k8 ? Y$ j+ D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! G6 K0 {7 ]2 |9 G( K' Z5 }+ O if (ret)8 O3 `/ o3 A+ l; h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ y4 c+ J& `+ N' N* R
"%d\n", ret);
3 z: B9 s$ v& n! d# o#endif
, a: W4 g& Z: E& i) B9 C6 o6 k ret = platform_device_register(&da850_evm_tl_leds_device);$ A1 X3 q8 F3 y( ?
if (ret)
% ?9 D: ]# O' F" ?: z8 ` pr_warning("Could not register som GPIO expander LEDS");5 m" f) Y& [! F; `+ y
else
* C) G6 J/ b S! Z printk(KERN_INFO "LED register sucessful!\n");
' D. l2 Z, s7 z0 F4 E( F4 |+ U2 p. W: V. |& b2 F! A# A
return ret;! u- D/ p3 W" x8 _2 ^4 M! R
}
- H; O- Z$ s, M
" _) _0 m) J, ]' A, k7 astatic void __exit led_platform_exit(void)
# }6 ]0 x2 ?( ?{6 G- z/ B6 m9 f1 W1 `8 [
platform_device_unregister(&da850_evm_tl_leds_device);% J! F: g& d% [8 G/ y, S5 p
, P+ v8 m8 t& Q
printk(KERN_INFO "LED unregister!\n");
, ^) l2 E5 ?2 j) r6 C/ I}. L, |2 r& @. r% A
& B6 a& |" f; o& _6 p3 s! t( _: U
module_init(led_platform_init);
5 U9 Y- H. g/ X$ W% D9 Y6 |module_exit(led_platform_exit);: m0 J1 f: k+ ]& w
4 @; H' L1 t" \9 J8 D* F( l* l( i
MODULE_DESCRIPTION("Led platform driver");1 {4 [' }8 E& C! V6 n# E
MODULE_AUTHOR("Tronlong");+ v6 g$ J$ d) ^7 ]) o4 D- N% |
MODULE_LICENSE("GPL");0 t4 d4 w+ d* C6 @) \
4 G+ G+ g% {, o1 s! S J
|
|