|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& c; P! Y& J8 N! a, `
#include <linux/init.h>
7 D7 [( l2 z( B3 V5 w# P/ G#include <linux/module.h>" O0 L$ ?6 o8 e2 y/ }
#include <linux/kernel.h>; |* y. V1 T5 S7 f& I* e% t
#include <linux/types.h>
) D4 D8 T% [8 p4 a' S& t% m#include <linux/gpio.h>
) l9 {& y$ Q3 [3 U+ F' H# N#include <linux/leds.h>/ ~" M0 u% T& ~5 B0 v
#include <linux/platform_device.h>
. m2 }8 U2 ]) ]$ P" T& e: l, M2 F' ]/ Y. c" P* R
#include <asm/mach-types.h>! X& ?2 f# i4 r" h4 ] ] G
#include <asm/mach/arch.h>
D) r# T6 R( ~& a#include <mach/da8xx.h>9 x+ F8 g( f9 `6 Y/ P+ N: y& y4 M, v
#include <mach/mux.h>
/ ]% C1 ]+ T7 r+ ^6 g) T5 U J2 N# q! m2 \- m* K$ `: g m/ F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ u6 \' r0 g; i$ h! p% g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# X/ q0 K0 K* b, s0 y6 G4 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& n) q# G* U' y% c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ v5 P6 `: v$ i! V2 V; }
+ R: m# F! P' k4 Q/* assign the tl som board LED-GPIOs*/ ~9 g$ A- ^7 @5 q% a5 o
static const short da850_evm_tl_user_led_pins[] = {9 E6 s6 O7 @" W _5 y
/* These pins are definition at <mach/mux.h> file */- c, W! y( ~ _1 E: v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. L7 F, e1 W8 K" d4 @& Q -1
0 J u. Y& t9 w9 m( k' P};
( e& L2 m, E" ^3 d$ a5 ^$ A& f/ Z" x. I" S- W
static struct gpio_led da850_evm_tl_leds[] = {
& n, }4 y' X) v E {7 x% }! y6 _ B/ ?' t
.active_low = 0,
; Z2 Y- ?/ L, L2 G. Y- C .gpio = DA850_USER_LED0,6 f Z5 u5 E, Z7 k' g" v
.name = "user_led0",
2 e+ R0 s$ k- F$ G+ V8 f .default_trigger = "default-on",
8 n1 L9 L k5 E1 p( ~& }* i },
2 H& f* f: y; F1 r# [ {) r( e# d" \; V$ Y
.active_low = 0,
* B2 U, g# s% B* O5 R8 {* m0 _ .gpio = DA850_USER_LED1,; R/ q e8 T4 y3 I+ t
.name = "user_led1",
8 G% q. a0 G/ M' C8 H .default_trigger = "default-on",' V/ p# s2 F J$ c
}, {7 f6 S% ^! Q% [& l" r5 x6 C
{+ N, O: ]5 e5 ^* L
.active_low = 0,
. a! N4 E0 [& z7 O$ K8 o$ \ .gpio = DA850_USER_LED2,, \ L- o3 g0 u1 r: t1 b
.name = "user_led2",
5 b. z8 o4 J- F" A .default_trigger = "default-on",
0 X" v% o3 t2 b },
1 b; A; j; [8 N {1 p2 O* M9 S9 a5 p$ u6 `9 c
.active_low = 0,$ L1 \5 n( M. _& w0 {0 O8 n7 p
.gpio = DA850_USER_LED3,
/ B4 b! W1 E. n# E .name = "user_led3",0 [. V4 c' a; ]. R
.default_trigger = "default-on",
! |( v/ D t$ a! | X },% K( _3 e( Z4 h
};
& ?* O6 z! D- ]2 Z3 {/ R" |, W9 i4 a0 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 a& a" n7 k8 `% t% u9 o' x* `
.leds = da850_evm_tl_leds,
0 V( V$ H1 N( Y A E4 D( a4 G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ E j, J q* t v* m) L% j
};/ _' p5 z) @* g
* d X, x2 D! b1 b8 h% C7 z
static void led_dev_release(struct device *dev) m+ I! E$ D$ S5 ?% [
{* C# i9 K% \7 b l. m
};
% e( o. j+ ~# D, E4 @; y
" N8 `& A' w& cstatic struct platform_device da850_evm_tl_leds_device = {
. N3 H B# L5 z: A# C. ^ .name = "leds-gpio",
: p* K: n$ x9 b1 S0 ~ q .id = 1,
/ n. ` F1 U9 j7 [6 O .dev = {
/ V$ i' E/ u- l" ^, D% f .platform_data = &da850_evm_tl_leds_pdata,+ t& w. ~) @2 y7 _+ G: ]
.release = led_dev_release,5 q& @: V- c# P4 H
}: |# y7 D9 z; g# W+ e8 Q- p
};* _" h) e$ g. T) p/ o4 [
+ M, L2 p0 r9 c; Y/ ~, ystatic int __init led_platform_init(void)2 C3 O! A. R/ ?1 x4 e9 y0 D
{4 d8 r) H* y& }6 K2 B/ h
int ret;$ O, m* L- P W, w& E5 U
#if 0
9 n" B8 c; X, A+ v7 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( R6 v$ X1 P3 L6 U, J& B if (ret)6 Q1 O2 F( ?' i5 o, d) l7 o; P ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# R/ Z3 o7 W) ~
"%d\n", ret);. T5 F/ h( s' \# c4 d% q
#endif9 a, P/ c) @: w4 ?
ret = platform_device_register(&da850_evm_tl_leds_device);0 \4 C' M( }+ S/ V6 \6 j% _+ Y
if (ret)' q5 q9 o/ t! j* [1 _1 L
pr_warning("Could not register som GPIO expander LEDS");
) p& S# ]# B/ H" e else
! H( R# z! Y- E printk(KERN_INFO "LED register sucessful!\n");9 B; w+ n9 G% `% q1 I1 K$ @/ _
& Q% `0 R; e6 w& D0 E, C i, a return ret;; I. z4 H+ i8 o; ?& i" q( }
}
# `0 b9 Z U& C( q ~1 Q& i& K9 g" Z$ q. u8 i9 U
static void __exit led_platform_exit(void) g$ L! F: R- G% g! \$ f# x5 f# j1 i
{
- ^0 A4 L1 Q) b" `% Z* ^ platform_device_unregister(&da850_evm_tl_leds_device);& O- L X2 p m3 R
7 S0 Y; L8 e4 _) ~0 f
printk(KERN_INFO "LED unregister!\n");* ]* t# _; I# a/ n/ ^/ s0 {5 D
}
9 `% u/ v2 P1 \ P8 ^) H1 |5 ~) K8 n3 p D* y+ n+ [1 U. N/ a0 x7 Q
module_init(led_platform_init);5 w3 _+ |( _, @
module_exit(led_platform_exit);/ j" W+ p. ^" ^# [' C
F! z# Y$ ?$ y" q0 CMODULE_DESCRIPTION("Led platform driver");7 u& q W# n1 K
MODULE_AUTHOR("Tronlong");
6 V! X( g5 i1 g9 J7 KMODULE_LICENSE("GPL");
: J. V% G) C" M* q; g4 U+ [7 X
* ~: n2 Q5 [! ` |
|