|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ ^4 D3 {& w+ V8 ?6 l6 B" ? K
#include <linux/init.h>. r0 k7 H# S; f
#include <linux/module.h>
( Y0 A6 T ]* f; c' x2 i#include <linux/kernel.h>8 L, _$ t! u+ n5 g, m
#include <linux/types.h>
4 C- e1 E: e: G1 S+ S#include <linux/gpio.h>
; i. b8 q! p/ S8 V#include <linux/leds.h>
% ~( \! S! U2 J+ ]& W; N% z#include <linux/platform_device.h>; w; W- F: L" [" Y! M
& G' _ J/ h2 ^1 q0 e#include <asm/mach-types.h>
1 n% T' S( z$ b# p8 R#include <asm/mach/arch.h>: V& t. G' W; @& `0 g
#include <mach/da8xx.h>0 I/ H' B0 C* q1 B1 T5 L( f: x7 J" e
#include <mach/mux.h>' f; b s' b6 y W. i" j, \2 u: c
# k" |3 i) @$ `3 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- j" G; X: Z, o& M; H1 |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
Q( Y3 P5 W2 Y! Y# r4 X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& n6 S/ G8 m6 I- {, |6 A! r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 s1 J* u# [) x% ^! |! ^" J
2 a( |* J( A7 q4 [( `4 y/* assign the tl som board LED-GPIOs*/8 k4 E/ j ~! D9 C* V" D# k( {
static const short da850_evm_tl_user_led_pins[] = {
4 X& y' d: Q8 d" g /* These pins are definition at <mach/mux.h> file */- f5 C+ N" B/ J9 ^" m7 v' \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 t( |" l9 h5 [9 n+ |, L -1
; H9 |5 D% O# `/ ]. [$ o};+ l8 I r: J1 B6 d
& M& O9 w# e$ |' D: b& Dstatic struct gpio_led da850_evm_tl_leds[] = {
1 X: u' M# Q5 U. W {2 k- S0 a, \/ o2 |' o# N: u' \6 v& O
.active_low = 0,
8 A% [7 T+ r' `. a `4 L .gpio = DA850_USER_LED0,/ d) e+ N" ?. {- Q5 M' h
.name = "user_led0",
1 c7 Z6 w: @7 v' R .default_trigger = "default-on",: E) _/ w) R6 Z
},
/ v+ s) y; H6 _. r. G9 p2 C* \7 J4 C4 c {0 R8 v7 ~- I {) n
.active_low = 0,
0 }2 V( m1 O) O) h .gpio = DA850_USER_LED1,
1 M# ?4 g0 ^0 c) m2 \) I .name = "user_led1",- e) h( T" {- ]- @7 q3 K0 U
.default_trigger = "default-on",0 d' p- e# W; d9 x
},' i# M9 k, F! ~5 C
{# Z* S Y4 D1 U8 n7 i, H
.active_low = 0,
+ S2 Z1 M7 w& o/ \: X+ _5 e3 I .gpio = DA850_USER_LED2,; Q# `' |, N- n4 D5 n& g2 n
.name = "user_led2",4 h8 K" f; n; @# T/ t+ P7 k
.default_trigger = "default-on",
$ r/ W0 \4 ^$ m5 R/ c },/ w. W7 L9 p1 d% m, [' C$ N% R% ]
{' d- D4 }; z" f9 Z/ d3 i
.active_low = 0,
1 o: A A/ q7 f2 d .gpio = DA850_USER_LED3,7 \& |/ |; W' m6 b
.name = "user_led3",3 ~ j! |' N+ b8 G% o$ j n
.default_trigger = "default-on",' |0 }$ \" K6 o' M9 ?3 N4 j6 x
},/ v% k: H5 P# k/ B2 p
};
/ G8 L4 _2 `' ]; g1 K. g( }4 p) @1 G* j( C+ K) ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 g# I" e" e8 @0 t) o8 u
.leds = da850_evm_tl_leds,7 k& P+ x: u3 [9 K6 ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i% `( N# S3 g' u};! z9 \$ i0 ], |
$ C' {8 r" F. F7 h# K
static void led_dev_release(struct device *dev)2 F5 @0 \, d0 v# X; h3 M: a# T
{
: v, N- Q1 f. L$ d# v% U};. g1 l( L8 H' c( ~# W
: R1 `# t& l3 q P( u, B1 ?5 Pstatic struct platform_device da850_evm_tl_leds_device = {
; @8 `5 [) f% f8 @ .name = "leds-gpio",, B) W. M; q% p( c
.id = 1,- ~1 A( l3 x' m1 }
.dev = {
: s5 K- ?' N! D6 B .platform_data = &da850_evm_tl_leds_pdata,) ?) t/ h" W$ r
.release = led_dev_release,0 u: x( C% o0 h
}* k c8 b, V9 g# G, H, Y
};* \7 [% T5 W: |3 @- ^8 O
3 O- {, g. T. n* r& Rstatic int __init led_platform_init(void)
. L; D1 v' l5 R4 i0 H( Z{# x' Y& s7 r$ V! I
int ret;2 m) R$ X: N2 V( | v7 @
#if 0$ q9 c; m0 H. B. E- |- m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: g5 `& b+ Z: Z9 M0 d6 F if (ret). a1 m( z' d0 W: A+ w; f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; @. r6 l5 s. y- [
"%d\n", ret);% P7 s) A- C2 A- l
#endif
" s+ c6 \7 @* W; _3 e' X( \5 [! ^ ret = platform_device_register(&da850_evm_tl_leds_device);
% U; Q7 ?$ N9 I: b* g3 P5 ~' K- P if (ret)
8 M, B% j8 d% _" l. I pr_warning("Could not register som GPIO expander LEDS");
! K7 g# D$ V8 q; T else
% ]2 |& S7 F/ k! [ Z6 Y% r* j+ s printk(KERN_INFO "LED register sucessful!\n");
B$ M( T4 C0 s4 m. M: e, H# X7 k; F$ U2 E# `
return ret;
6 }! q5 o/ U. a- i3 T}
5 z B: a; F. z M' F' k1 j4 @) h3 i/ E/ ]0 i! _
static void __exit led_platform_exit(void)( h9 h. k V& H. y1 b' S- q, K5 p, L
{4 k" k T; }1 u- K
platform_device_unregister(&da850_evm_tl_leds_device);
! R! Z* _' t- e+ m, z/ }7 y# x
; N* o+ A* y. ~" r+ V* z6 i printk(KERN_INFO "LED unregister!\n");5 ~, ?' C3 z1 |9 G' y" |
}8 u$ ~$ g, } y. p4 _" s
8 A- Q- t/ Q! }. `; F( ^7 s2 d: W
module_init(led_platform_init);
" d4 n9 z5 R6 o: mmodule_exit(led_platform_exit);7 [* t/ ?' f) ^ _
) e6 q( k6 z% [+ o4 v4 c( WMODULE_DESCRIPTION("Led platform driver"); i, [* p' e1 W. a
MODULE_AUTHOR("Tronlong");& I9 E( D/ T8 c3 @, j% U ^
MODULE_LICENSE("GPL");
( }2 h+ w! I. O
8 L" I4 h+ q/ [ |
|