|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( r, }. T& d' D" E: x1 w9 d! t
#include <linux/init.h>
+ R& m, @0 w6 n( L9 V3 u" p#include <linux/module.h>, n& r) } C, F$ `
#include <linux/kernel.h>
8 a7 ^. c, P' [- t+ k) D8 i$ H5 K2 z#include <linux/types.h>
4 \* a v) u2 @0 x; P$ g G#include <linux/gpio.h>1 s c+ m5 x) l2 s0 O
#include <linux/leds.h>" G* e) e, s) Z- c* P4 t8 u
#include <linux/platform_device.h>
% y3 R7 e W' y4 t5 q; V, u9 b8 r2 b! A$ J3 c" B; j; X2 G5 @
#include <asm/mach-types.h>1 k; j3 ]* J8 X6 S
#include <asm/mach/arch.h>
/ k, i9 P7 l2 @* a @! p. K& @9 V#include <mach/da8xx.h>7 a& @& |# G# A' A
#include <mach/mux.h> Y. W' c6 g" w( q+ v
! [8 k3 Q$ {. T+ ]& G; c# y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 i' v& `4 @ n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" j5 ?* T2 e2 p |! O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 x1 C' E9 c& }* D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 W- B9 r# X+ ]6 T3 L8 \+ L
0 ]$ }2 w% y3 G6 r; D/ S; s2 O/* assign the tl som board LED-GPIOs*/
9 d2 E+ n: k' s# k* ?static const short da850_evm_tl_user_led_pins[] = {
. m1 D/ d4 N7 y6 N4 Z3 o e# H/ E /* These pins are definition at <mach/mux.h> file */
; f& r$ b+ X& N5 } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," E) M P) N2 I. u B* t
-1
" d* s+ t; N, D, I, L1 q" N. A9 j};) f6 L$ m$ P- p ^$ t5 k& Q
) X# v* r* R& S9 W: t6 ]# q
static struct gpio_led da850_evm_tl_leds[] = {- r: G; |( [, Y) t/ M
{
z: K ^: @" x* k .active_low = 0,
+ v, M5 m* N! P+ H .gpio = DA850_USER_LED0,2 y- b2 u: f( S& m, O
.name = "user_led0",
! \% G% n5 w5 o6 @7 V .default_trigger = "default-on",
3 ]0 s- a/ i3 z; c5 ?; S },/ k8 U* O7 b& H$ C6 R( D
{
, z: u, y b# F F& u7 h .active_low = 0,
- h. k! F: Y; _8 D .gpio = DA850_USER_LED1,; Q3 Q! U; S5 ~9 G; W# D
.name = "user_led1",8 S3 T, |, d3 u0 O& o/ O6 m
.default_trigger = "default-on",
" B: e2 g8 X3 ? },
3 O& q* J" @0 t. s' N! j {
. C0 M4 B! b9 d5 B .active_low = 0,
5 G B" {/ M- ^. J( k2 v# o .gpio = DA850_USER_LED2,
3 v# E7 v2 Z+ z8 }( H3 s W .name = "user_led2",
+ d; S7 _9 Z! l; E- U( K ~ .default_trigger = "default-on",
& g9 u- g1 T/ v4 s0 M# X },7 `. C7 [* ~% S5 `
{& }3 g9 K' ^/ ?/ X
.active_low = 0,
, Y2 r8 m7 k# j. \) R. Y .gpio = DA850_USER_LED3,
, @- {/ D5 b4 `' k .name = "user_led3",
; X9 |) E4 @) {/ n$ w* f .default_trigger = "default-on",
& e, Q1 p0 L0 l6 L- X& a- u },$ a2 D1 R2 t# M* `3 a6 [5 n" q
};
" \2 D( e: ]2 a% a
/ v; \ \ Z8 L- v7 {8 }" y8 tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% J; k N9 R/ s/ X7 t. R
.leds = da850_evm_tl_leds,
' m B( o. x# [' b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i c; [5 D. P' q1 C0 [1 q};
. n* w* t) @# D% r& J
6 `* Q( L& `4 A! @( X4 F4 Istatic void led_dev_release(struct device *dev): m4 w% v' w, B, ^3 I
{
* g) p" V6 Z1 L4 M7 i# M8 L};
/ H. i+ O" | j$ a
# m9 v3 V5 i* x) y* f' ystatic struct platform_device da850_evm_tl_leds_device = {: e. G; E1 k- ~. a/ V* W
.name = "leds-gpio",( I& e i- W2 w3 z0 s
.id = 1,
# l- d: y9 X" x) ?+ @% t .dev = {
9 ]$ n( g7 e: [. A5 t* x) U" m .platform_data = &da850_evm_tl_leds_pdata,' R2 T" d2 \4 c+ a
.release = led_dev_release,
( y0 b4 P* C1 N5 J" B }
/ T4 B/ F& o/ C8 T; E9 Y};) b' u0 D6 k' M
+ k ]8 }# h3 Q0 F0 u2 c. Dstatic int __init led_platform_init(void)* q* l7 V# a; V
{
; j5 I* H1 p5 x- B5 x int ret; _5 f# {% P. s& a
#if 0. ]7 f+ W8 K; e( |7 |/ S6 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ @1 F, ~1 n1 k( N& A if (ret)
0 y+ [, |5 w* l, w- s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- B. u6 V7 N1 S4 j5 ~' @* q
"%d\n", ret);
" {4 p2 Z6 s* ]- v$ |#endif
7 A- V+ `! P# E/ c/ u1 Y/ Y ret = platform_device_register(&da850_evm_tl_leds_device);$ r0 S7 u# o8 _: M
if (ret): w% N% _( \; D: t0 j" t
pr_warning("Could not register som GPIO expander LEDS");
. @$ E1 B* r0 L1 a9 N else
$ F1 q6 f) @( P printk(KERN_INFO "LED register sucessful!\n");; k: b, k, O S! S4 i4 @& U( [
! O( {. l# e! c2 @6 _" p
return ret;
; A$ H. q E4 v}
6 A; K* b' x) x: B6 T3 X
, u$ m G- a5 b) ~) E2 ~static void __exit led_platform_exit(void)' U5 B9 `% T: V( c7 S
{ y1 q( {* a# l( A% q' H) ^5 M8 {
platform_device_unregister(&da850_evm_tl_leds_device);
7 X. v# h- ] d1 s
# z, [9 Z' p( r- e printk(KERN_INFO "LED unregister!\n");1 s$ k, S: j) n" b5 M7 x" ^: ~
}) \* p- Z6 z: ?/ Z0 d
4 h4 t+ N* o! I. Z1 H
module_init(led_platform_init);
' J& z7 M5 J+ ?# O7 S; X% i$ T4 smodule_exit(led_platform_exit);9 O2 X/ z; p2 _' _2 _, ?9 r
6 p; i) {! O$ h' Y- j2 HMODULE_DESCRIPTION("Led platform driver");
3 n( R6 V% G9 e1 WMODULE_AUTHOR("Tronlong");
3 W1 T; a* ^7 [; K& Y0 ?! LMODULE_LICENSE("GPL");
4 g. ~ c$ R) f
' i( I) a! C8 Q7 e) \ |
|