|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 _: B E! E b2 J1 i& I
#include <linux/init.h>
2 y1 C' O8 O" J5 E- z% ~* `, Z#include <linux/module.h>
' H, ]+ m$ p, Z9 p#include <linux/kernel.h>( y" t+ l. R+ p3 i6 G0 l
#include <linux/types.h>
5 _+ n C% w# c2 G#include <linux/gpio.h>
4 g3 H5 w3 {* e& A: p) s( j#include <linux/leds.h>
4 c* }: Q5 M5 |8 F" S1 G( R#include <linux/platform_device.h>
5 H6 e5 ~' t0 L1 t9 m
* |$ }: F/ F f- Z#include <asm/mach-types.h>3 _. D& w; Y2 h' A
#include <asm/mach/arch.h>
2 s3 J8 S$ @. d$ I2 l/ M8 T#include <mach/da8xx.h>
% R) m1 q3 `0 t+ J#include <mach/mux.h>
8 v4 P$ a: ~7 F- A6 D
* ?( @& n& [1 W, F; M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ X/ @; X b; p# V# p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% K2 c, }: T& F! G0 m- @( N+ S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 p% d9 J* }' @- q9 T, z8 P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), ?9 b. l: T4 u4 K9 r! |, L
7 ?6 q6 i8 {7 l5 y8 p/* assign the tl som board LED-GPIOs*/
, D3 f, \- r# ustatic const short da850_evm_tl_user_led_pins[] = {
8 T) H" ^0 x: @. U /* These pins are definition at <mach/mux.h> file */" B6 e4 b1 q' J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
u- h: N( @# v+ a; R: ~ -1' L# i( A1 X( R
};
! x' w$ X7 B& O2 i8 A# X/ W
% _ ?5 T7 A' P/ i1 ystatic struct gpio_led da850_evm_tl_leds[] = {8 U+ J- m, ?% i1 L" l3 o
{8 f& @+ D- G! N! O
.active_low = 0,
* r- H3 }2 ~; S: T2 D .gpio = DA850_USER_LED0," }% s& q Q& H; n; V
.name = "user_led0",
/ S: w6 z* Q5 }: s* u t, I: U .default_trigger = "default-on",/ R* j3 }" i: ?+ J6 a
}, r4 u1 _- j" h0 v9 o
{" ?7 \! s3 E- z# \" ^' o
.active_low = 0,9 O: c/ c: E1 b: c
.gpio = DA850_USER_LED1,
4 D. J; C. |2 F5 {* O( n1 U# P .name = "user_led1",- D. W! f; o5 [) r' q9 A
.default_trigger = "default-on",
; ]5 ~" ?% h# W# _4 l },8 Q& y( B9 C2 w6 f8 z# s L! B/ y1 i
{5 A; W8 V6 c8 i3 I; y5 |8 {- ~$ c
.active_low = 0,
+ z. S* S6 r2 u: ?* D# \ .gpio = DA850_USER_LED2,4 y$ U( k; d# ` g& k$ \8 L
.name = "user_led2",
+ Z* Z) x. Z9 b+ \1 p I .default_trigger = "default-on",
6 |4 n# d1 _$ H9 p6 Y5 i+ Q },
2 t! s+ k& L& A {
( _( L* A( t0 X0 i0 `5 b1 H .active_low = 0,
c2 \; |9 \4 O( _) k .gpio = DA850_USER_LED3,
, b8 k9 f% y8 S+ Q+ Q5 Q .name = "user_led3",
. Y/ n1 d$ O! X4 B- b7 S. d .default_trigger = "default-on",
+ C& N+ C! J- s! _ J6 n },1 w M; r% s- \8 Y8 Z
};
# m( R6 f/ k0 z+ m" ^; e% ]. t. s9 F9 B6 J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% ]0 {( S* ?2 k: U' b .leds = da850_evm_tl_leds,
, V% [7 Z& c ~& `: w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 U7 H7 n1 s4 {2 L' a0 ~};
! C( t9 h- H9 z( n( k/ r1 s ?3 X' n3 L$ {5 q7 \$ s) s w
static void led_dev_release(struct device *dev)
1 m7 a# L5 E( g{' R/ }! A# E2 y, J9 B
};
+ d/ x( ^" z: R. s+ l e, a+ `
J) h) Y6 g4 Z4 u' fstatic struct platform_device da850_evm_tl_leds_device = {
0 l1 t4 \! ]' Q2 L- p: ~$ J .name = "leds-gpio",# i9 {* c5 \# y
.id = 1,: F2 }6 H1 |8 z. r
.dev = {5 {! ^) \. S/ N3 Z! J; v9 I
.platform_data = &da850_evm_tl_leds_pdata,
0 X N K. l8 V8 N .release = led_dev_release,
* [5 E8 J; ^0 u8 Q: r2 C0 W. D }4 m$ n% s+ p, H* D4 O
};
, B9 |% t, ~, P- Y+ D- F
& n% J8 @' M5 e& W$ Jstatic int __init led_platform_init(void)6 j3 L5 k Q; ?5 p' `8 f0 K1 Y
{) r7 U3 q. D1 l$ C
int ret;
; C# n7 u: _% J6 S6 B#if 0
& z0 `- Z1 c# e$ K) y- A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 m' e/ _7 ~ r1 p
if (ret)
$ G3 K8 e4 G# Z3 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; Q8 ], [' q: P1 @9 q: U, U "%d\n", ret);3 l+ t z3 W& t
#endif9 K! J" D- [: O s4 J- B
ret = platform_device_register(&da850_evm_tl_leds_device);
5 |# u" g. E! D% G9 p if (ret)9 o7 h3 [& s9 S `& a# R0 x
pr_warning("Could not register som GPIO expander LEDS");
; X! ?' X8 }6 f6 y5 { else
; j( g, S. ~' c; a8 s$ K printk(KERN_INFO "LED register sucessful!\n");
( B. d% |+ p! ]) P' S% l* N' d7 O
return ret;
' S' Q6 b/ z' }6 u6 U}
. \8 _+ b4 U3 P. R' z0 D' a
/ o) Y$ c: J6 V8 i7 D! L" Sstatic void __exit led_platform_exit(void)* v2 D# K. F. `. J$ {( t5 H) W
{
: y1 @' A7 A: V# U, A2 c0 t. _ platform_device_unregister(&da850_evm_tl_leds_device);7 f. h$ W V3 a) k% t+ a$ G" {- h6 M
- u0 V3 U' k3 G( I& Q3 P printk(KERN_INFO "LED unregister!\n");
, h9 Q1 i0 f+ e2 A8 c}
& I$ A5 ` w5 f' f2 I7 F8 l' F/ G
module_init(led_platform_init);
. D8 S" o) Y* f. s: `" \+ Omodule_exit(led_platform_exit);7 h+ f* x5 [( B9 `
f) X" K% G, O! @/ n$ zMODULE_DESCRIPTION("Led platform driver");
5 `! K- I7 W% m( \3 NMODULE_AUTHOR("Tronlong");
2 e& p8 H9 h7 Y4 bMODULE_LICENSE("GPL");& z$ K' z5 r( i0 S$ O. v2 W
4 [% I$ O2 }$ I: e {* s! d* p3 d |
|