|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' Y3 ^4 X' {/ l
#include <linux/init.h>
& p4 S- w5 ^* H% Z#include <linux/module.h>
& E5 p/ ^/ M( J% E% N2 y1 j#include <linux/kernel.h>. M. p8 F5 k# o& z$ v
#include <linux/types.h> O; G9 y8 F7 ]* K2 D; F
#include <linux/gpio.h>
$ z9 I& f; b+ A& V" O7 V#include <linux/leds.h>' \( k5 z- R: v' i1 ^! b
#include <linux/platform_device.h>1 I& x# q, I: u, T3 |4 w
+ n9 Q, H& n/ t; U/ @#include <asm/mach-types.h>
@) W( [/ W0 o3 g6 ]' ]1 l5 y3 D#include <asm/mach/arch.h>* Q6 U W* o' s; ^( p
#include <mach/da8xx.h>" A$ W* ` n. I9 m
#include <mach/mux.h>
- L5 [ ^$ `( X. U. Y& m2 y
& Q$ `7 W$ T' q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ O* U) ?( Q- K7 |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ t! S4 y" M2 i( |( H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# o( @9 l( U" F( B- p- M: b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 l3 k4 @ p6 X" ]4 t& F& o" ~8 I4 _+ J; B
/* assign the tl som board LED-GPIOs*/( H B+ b1 j. s3 {. a/ X0 D
static const short da850_evm_tl_user_led_pins[] = {
, U5 I. J8 M3 X) }% L( p2 R /* These pins are definition at <mach/mux.h> file */( m8 w# t5 r5 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ l# L0 ?5 F2 X
-1
. `& W' a$ S y2 o};( S9 {6 e& B1 A' ]0 P
v+ r% [8 T5 k
static struct gpio_led da850_evm_tl_leds[] = {; ^; B1 n% E: w( S
{
/ e4 A7 t( ^9 X1 \ .active_low = 0,
# s: w5 T$ Z+ K3 T& G' u .gpio = DA850_USER_LED0,/ A: M) Z. V; c5 x- {$ c
.name = "user_led0",* y% s; X2 M0 Z+ l
.default_trigger = "default-on",5 G# ]4 N) o% E2 h& p
},- C# J: \* i* W8 `
{9 z; _3 H+ ?7 Y
.active_low = 0,
0 i5 p+ m2 `4 Q% b9 s s" a& k .gpio = DA850_USER_LED1,
/ w! y7 @" ~, I, h# h: d4 L .name = "user_led1",
" G$ R& A; I* n, u" Z$ d& j .default_trigger = "default-on",7 q6 V3 Q* v, A9 P
},4 \/ ]- j# q ?8 @- _% m, e3 e: \
{
& Y4 \2 f+ S8 R .active_low = 0,4 Y \# B) B6 |3 I
.gpio = DA850_USER_LED2,: Y- k) s2 N1 u! S" t, M
.name = "user_led2",3 ~9 F/ w9 G \
.default_trigger = "default-on",
" p) L, e( `) q, V% D },; H8 V+ X M7 c, a! Q) x& _' A% j
{
$ y/ b- g& E( i) q .active_low = 0,
0 M# I% k# T3 H .gpio = DA850_USER_LED3,
2 M5 r, t6 _1 X& g .name = "user_led3",( E% ?: A4 A' h8 @
.default_trigger = "default-on",/ b1 ^# P% V! a8 w8 P
},# j. {. C8 o% o( ~/ n7 R2 ~& a
};* h+ O! w+ A5 J4 o: K4 F
; q; Y U6 q5 \: u1 g# Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# z# d+ k4 _1 g ]+ U
.leds = da850_evm_tl_leds,
" n, F, ~- \/ V3 H8 A* ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 n/ t9 v+ {( P* H- K};. m: G8 b, p+ R
, h B2 ^- ?+ N7 }/ k$ r
static void led_dev_release(struct device *dev)
; O3 x8 S+ h- R# @* n) c6 M{
3 M+ B7 z% T* T. S# M/ Z};
8 ^9 p9 J! e" b$ @3 M) q' J4 O: A6 n* e6 t
static struct platform_device da850_evm_tl_leds_device = {$ n9 C: O: j1 ^( N; x+ y7 c, X( q
.name = "leds-gpio",
7 }% T1 n: j7 h5 e .id = 1,
/ a. j2 k' v6 V( v .dev = {- m$ }5 E) h5 j5 x3 r
.platform_data = &da850_evm_tl_leds_pdata,
( l7 I7 D0 v) n6 x( Z( m .release = led_dev_release,- O; D d2 F5 q0 y$ T. ^2 q) {
}
; v) t: L: e# t' ^+ g};
+ j' M# C: b {7 C" u6 ]
# l3 V; a2 y4 }4 w1 sstatic int __init led_platform_init(void)
$ r, P3 V( z2 M$ e$ y( H# b" L{
% s4 b! K4 f# h6 i& E" L; e1 l' W int ret;) g; I3 r6 L, y# a
#if 0
) L/ k! v; Z1 b* y' O6 c" a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" @1 H$ V" B3 ~3 a( g if (ret). u7 z0 N! p) Z0 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 @7 X* @2 _7 b L$ t8 D# w; \
"%d\n", ret);
/ r) Y& d# }% q7 H4 K+ G! a& q8 ]#endif
& E' Z: j! k1 P. C ret = platform_device_register(&da850_evm_tl_leds_device);- Z! R9 }. W% t) c" `* C+ L
if (ret)6 ]9 B# l$ B3 N: h; `& K
pr_warning("Could not register som GPIO expander LEDS");6 A9 t: y/ o- ]+ ^. P7 v4 ^
else
! n& Q' U Y" @4 n3 }# F printk(KERN_INFO "LED register sucessful!\n");
1 @+ L) N4 _+ n z7 ]' k. i$ z/ D1 v8 G
return ret;3 ]' i! c, l: B) `0 r" G) V- ]7 U
}
- x; P5 C# r! w a' f
# D% j1 M" m9 z2 hstatic void __exit led_platform_exit(void)
6 N7 u! h+ P6 W# U/ B0 I{( x, v+ e% r1 I% F/ j/ `
platform_device_unregister(&da850_evm_tl_leds_device);
: y7 B. i) d" X4 E) Y2 n6 t/ I. n y7 I
printk(KERN_INFO "LED unregister!\n");/ G" L* ]+ o4 G
}
5 q4 O! i2 }! {) E% O( s' E6 r+ m! x1 ?) i; L, J7 c
module_init(led_platform_init);4 v9 b# ~2 Q3 P) ]
module_exit(led_platform_exit);
6 r( T3 e8 P7 ^& a2 w3 t+ G
# J4 @9 O2 o) |9 g8 W1 x* z7 q) fMODULE_DESCRIPTION("Led platform driver");
' N5 T. Q+ r- `MODULE_AUTHOR("Tronlong");* N7 `9 M8 C+ Z) F% p: {7 k
MODULE_LICENSE("GPL");
1 b' A8 T6 m4 s) G+ M
& U- y1 T( ^& G; ~7 T0 F! S |
|