|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! s8 y, q1 T& F#include <linux/init.h>
" D- q8 M' k! W1 [7 @#include <linux/module.h>
) c, U( e, |: r+ ~# J8 V0 a#include <linux/kernel.h>4 d( i& A) Q& o: T, g- h$ q3 o" Z8 Y
#include <linux/types.h>. e1 B" {! s" y' N
#include <linux/gpio.h>* \3 l! ^+ H9 ^' m2 v [5 {
#include <linux/leds.h>
8 I. @8 W# X# D% q1 ]) I#include <linux/platform_device.h>
, M" }7 o8 p/ X8 R* t& K) l$ [) ]/ |6 f/ x h. _
#include <asm/mach-types.h>+ V& ~& x& Y! C" w; \5 k
#include <asm/mach/arch.h>+ C0 N7 k$ T8 ?' W
#include <mach/da8xx.h>" D8 B4 I' `7 a |; e
#include <mach/mux.h>
* E0 X& p6 o$ }1 H" f+ z% y2 W- \" B9 }, z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) e$ X5 k, ?+ a1 j- c3 b0 g i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& h( W8 x1 e" A( e5 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 V4 j& n, Q% h2 J9 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( r8 S+ }% o2 D) M+ g' R0 C) V2 u3 \( ]2 ^& \* I
/* assign the tl som board LED-GPIOs*/. b, C3 ]$ P* l/ k+ Q, w. I% T- p
static const short da850_evm_tl_user_led_pins[] = {
: V! J, @" b& c1 t4 \7 u /* These pins are definition at <mach/mux.h> file */
/ Q( e5 \8 k( Q8 Z( P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& o* j9 P- n3 |: E E+ y -1
# E7 A+ t- i9 [* J. I};
3 P0 E* p. L6 T# z) Q6 Q
- N, k) G I7 V; z- S( N' Tstatic struct gpio_led da850_evm_tl_leds[] = {
2 L8 N5 U5 m9 D2 F. p0 y {; \# F0 j7 _2 i$ ^8 |3 \* S
.active_low = 0,5 |2 ]( \* A6 A3 d6 p* G* S
.gpio = DA850_USER_LED0,
) V0 g* }- Z# M4 Z/ D+ { .name = "user_led0",0 @( E' ^0 z) P
.default_trigger = "default-on",
4 | h( o- Q6 Q },3 ^7 p9 X* ]& S) }5 |
{
+ N2 u( h% w1 A4 y .active_low = 0,+ K4 o2 ^: g0 t5 S8 u5 J5 [
.gpio = DA850_USER_LED1,
, `) b4 A1 N" A' \: c8 D .name = "user_led1",
; w; h- V& I/ y0 i) o" Q .default_trigger = "default-on",) z f+ u. E' E8 W @
},1 Y: |7 c5 [* g+ Z
{* M. e0 k; k, y. Q- W( b5 T
.active_low = 0,0 |2 h, P1 P; E8 Q* K8 B: l
.gpio = DA850_USER_LED2,
- @; {% g' p' o/ {% v .name = "user_led2",6 u8 l; z, W3 s" k, D
.default_trigger = "default-on",
0 Y. H5 V$ l0 u4 e7 ^$ w5 K: d },0 M# y- A: G( X% ~2 ~& W# L- s
{
# E+ S$ c4 i u, N& a8 g2 B2 A .active_low = 0,
- q2 [7 d; ?# r' v) y .gpio = DA850_USER_LED3,
& l( G. U4 }- o$ ]% Y .name = "user_led3",
! \2 n3 z' c6 |+ | A, n8 I .default_trigger = "default-on",5 T2 Y. g7 o5 r* e
},
7 Z+ u+ H7 e8 }: r! c* P" g};
0 Q1 |; G" K% x, P, v
7 y& T, W1 f& z3 Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: l0 u* V) m; f
.leds = da850_evm_tl_leds,
9 w* u: d( j- O8 {7 H' i8 c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 F. g/ r: n# N; W8 u) _3 s$ i};# M- j( ^4 l3 n7 b3 ~4 h
! F3 _! M n$ R2 l- ^! E* G- istatic void led_dev_release(struct device *dev)* y/ |2 Y' L: m0 ^. O
{
/ E! B' P% R* D3 ]' H6 P};% J2 B: s2 x' S5 b
- G y- t4 Z1 R8 Tstatic struct platform_device da850_evm_tl_leds_device = {2 m+ {, a7 j+ w6 o, _3 G) M) A* J
.name = "leds-gpio",) W6 A+ {3 Y7 T# J& m5 r
.id = 1," H* k, `. } Z$ \4 f2 J8 P& C, g
.dev = {) p2 f; M" V6 S& J
.platform_data = &da850_evm_tl_leds_pdata,2 `% E- [) C0 H7 U& {% ~1 p4 U# p
.release = led_dev_release,
( ~" y7 a4 n6 U }
- J3 P$ h$ e( ~5 _};+ v9 r4 J* Q, |4 [. I; ~
- Q6 P# c* L5 \1 G; \7 Vstatic int __init led_platform_init(void)
- R4 w l) i+ N( N{
7 m& W, T0 t: `' r int ret;& A3 G: B0 v" |4 ~% v2 o! n9 P
#if 0
, X. ?% s. C$ ~% C3 j+ ]' y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 `1 H* B2 ]+ E- t4 |7 \ if (ret)1 F/ E$ f0 I( i* O7 |3 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 I2 `6 U5 g; l8 O "%d\n", ret);
$ F) z/ v3 z6 G% o5 ~8 g5 \#endif- i( k3 h& e. J/ o9 e& O0 G# A
ret = platform_device_register(&da850_evm_tl_leds_device);' ~: N0 V& a- F2 z0 l. v2 ]* o
if (ret)
. `: u" E# v: L Y4 A pr_warning("Could not register som GPIO expander LEDS");
( B; p! H( l; Y$ \ B; p* T9 @8 e. c else% f. u. K2 D# K2 e# O# o
printk(KERN_INFO "LED register sucessful!\n");3 C+ U- G/ `& w! a I
Q8 {: ]' b$ W2 [ c: A return ret;5 b8 }% D' a" j( l4 Q
}% U. I& k7 \% X2 ~0 @
A, E5 c/ `. O/ C2 jstatic void __exit led_platform_exit(void)) b W9 v" ~8 D
{2 ?+ b4 s1 u0 o) w
platform_device_unregister(&da850_evm_tl_leds_device);$ ^$ V6 r) H( d% J
) V) I5 C. d T5 b
printk(KERN_INFO "LED unregister!\n");
* L) s. U* G# M# @}+ J7 V8 T! |% H, L0 \9 O: m
& P; i/ A/ h) G/ K3 u" s9 }; tmodule_init(led_platform_init);
/ F2 _% @; p; g- H" u+ g5 d8 ^module_exit(led_platform_exit);
b! v0 j7 P" M
0 L; m5 b+ `( u* v! BMODULE_DESCRIPTION("Led platform driver");! g$ H2 E e5 C% O4 y4 I9 G
MODULE_AUTHOR("Tronlong");! ]8 G1 k5 L6 ~% L" b
MODULE_LICENSE("GPL");
! m n& q& x }0 J. D2 S/ r
! G/ S* p h: `7 T+ x' W. H0 | |
|