|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- ]% H7 Y' X3 A, R
#include <linux/init.h>0 Y* w) M' K- t! D: M
#include <linux/module.h>+ U H' I N' l$ o& ^' c& Y/ z! u; D
#include <linux/kernel.h>7 B+ c% Z5 N; u: _0 y" ]4 g
#include <linux/types.h>
N$ V/ L2 y2 t" @#include <linux/gpio.h>
! s8 V }6 f( k$ X+ u( H5 C#include <linux/leds.h>
+ R* e: t. C0 \; F/ U/ v#include <linux/platform_device.h>
4 |/ W! ]' ?/ l6 q; P
! u' m. R# |1 i2 K5 f/ [* i6 r#include <asm/mach-types.h>
. p3 M7 A6 _( m! l, J, K#include <asm/mach/arch.h>3 f2 ?# _- M4 y4 B
#include <mach/da8xx.h>
' a) L r9 d& c, @#include <mach/mux.h># W9 ^% m# ]9 B; W$ X5 R+ z
9 F" f6 Z) p! i" @7 Y, ^4 v7 S$ O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% q% V$ B5 r9 H& {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 E _: v$ s! A% U: G0 b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 I% X& r7 I! D( {( s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! o/ r' z7 U( r" J4 j$ A
( _6 H/ W ]1 d% p- ]# x: T; J/* assign the tl som board LED-GPIOs*/
4 l5 |- K, [ D1 A# y/ `0 Nstatic const short da850_evm_tl_user_led_pins[] = {
/ W/ B: T7 w5 c; Q /* These pins are definition at <mach/mux.h> file */
8 W, S. n! ]& F1 `" }$ y3 F( n9 P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 a: @- L" {, U1 g
-1# A: e2 {4 P8 j3 d+ R
};1 o# a" {) i$ }; R3 E3 t
2 E4 n! N, z2 a9 r0 ]8 V
static struct gpio_led da850_evm_tl_leds[] = {
' m6 U% Q1 u$ _" i4 g; Q# _ { e$ ]( S( t; w y2 }7 H$ P
.active_low = 0,
" V7 I" g. t: Q; J. U6 {9 J" Q .gpio = DA850_USER_LED0,
. W* q, W2 M6 h .name = "user_led0",
$ L- f$ S7 v+ s) V [4 s# H .default_trigger = "default-on", p; P4 a+ s( ~9 ?; u
},1 `) }( \2 J- |4 U8 B8 v, @
{
% d3 N A' G2 W7 x$ a .active_low = 0,
# L1 x( g& \8 ^+ J- q6 s .gpio = DA850_USER_LED1,/ J. H0 c$ e+ i9 s4 U2 w! Q
.name = "user_led1",
. i! Y/ U3 V ~* G7 K .default_trigger = "default-on",( P) q) L' j4 c! n
},: Y' S9 b6 Q- X/ I/ p1 m% } z
{$ n& O" N' J6 {- W" e
.active_low = 0,
) E1 _! z3 f3 o$ L9 t; n- W4 S .gpio = DA850_USER_LED2,
3 x0 I. I0 ~" \/ t .name = "user_led2",! q- A% ]9 F( a; t% D
.default_trigger = "default-on",# f U& i2 G! I* N
},. [! P& K# B; t0 P- }
{; Z3 a# u$ N! a
.active_low = 0,. ?/ [' @0 Q' N7 ~( V. B
.gpio = DA850_USER_LED3,$ s, f y1 L& X! L2 ]: }, X) C
.name = "user_led3",
$ F4 E& p2 p9 _: _$ ^4 j; {& l5 G .default_trigger = "default-on",
# q7 t/ ~2 {' i" Y; ]# Z: z },% ]( r7 R9 K! {+ r- [0 |+ h {
};
! V L4 J% r0 D7 j: k' Y' G: a6 z9 m6 `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ o% x3 g1 [; i, Q6 V
.leds = da850_evm_tl_leds,) k( p" v& f; o8 ?4 m' X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' N6 k& r1 M8 b j7 }) } _
};/ d7 J8 o4 Q/ F
; ] g3 [% }9 i) a2 a+ P- }3 e
static void led_dev_release(struct device *dev)+ |: S3 q" @0 W- d6 d. n' w% Y4 G2 a
{! r- Z' m+ |, [, B5 C' D! w
};
) _" J/ f: J. W3 @! D. B- I
# u; P. c) P3 S/ I. Rstatic struct platform_device da850_evm_tl_leds_device = {9 S( Y+ m# {) Z* q% |
.name = "leds-gpio",! @* c$ k) s8 B* q. k
.id = 1,- D" A# Y9 Y, e1 M$ `: y
.dev = {8 O5 m5 U" ^* Q: k3 @
.platform_data = &da850_evm_tl_leds_pdata,
1 L( u; l$ b; @; t' F. {: D .release = led_dev_release,4 s& h. a/ |+ t$ P6 P
}! p8 y2 p- f n% V
};. w8 o8 `! O9 J3 N1 Z
% {# Q" W7 [( T4 v3 E4 O; Vstatic int __init led_platform_init(void)0 t; a o% i% B. n
{
5 ?4 a w3 M' ?: l int ret;- W& k% u% c7 ~ ?
#if 0
( b( g) w0 @& j. y) d5 b- c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) t3 z3 x# Y7 E$ e, q
if (ret)3 m4 w7 @7 R" s) i" X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ F* z+ K7 W9 b: |2 J9 ]6 S" f "%d\n", ret);( [3 V0 [4 [' S1 u. ~7 E
#endif
0 M" [$ b3 i+ k( z9 w" I ret = platform_device_register(&da850_evm_tl_leds_device);
! D l9 I( \- m9 K' u! p) g if (ret)
0 L0 [+ v8 k! ^) l5 N( m5 s$ b pr_warning("Could not register som GPIO expander LEDS");
. p8 V1 ?# K- Q/ c6 R else i. u, n- |# k/ U/ h
printk(KERN_INFO "LED register sucessful!\n");9 M! i* p2 B' u. Y. \
1 _2 l0 P( M" ^
return ret;
. X+ d0 S! X9 I: v) l}7 `& _+ B+ j& n, q9 V/ J0 M
$ e3 ~9 K* R# g# E3 K% P+ wstatic void __exit led_platform_exit(void)* L" v1 |) M; {; b, l3 Y8 n; p
{
; e1 p7 a, R, A2 [7 F, D6 ?0 y% o- u platform_device_unregister(&da850_evm_tl_leds_device);
/ K# N. h0 P" A: t! e' @6 G9 p/ [. a$ z# r' @
printk(KERN_INFO "LED unregister!\n");
3 L7 P, h/ W9 S5 {8 {}" _+ ~- S0 I6 n: K, c: C/ o# S- i; _ ~
! Q8 @- ~0 G+ `- J5 u
module_init(led_platform_init);+ c% J, V/ R {% e# T0 b
module_exit(led_platform_exit);
9 e4 h# h$ A/ X7 ?6 A+ p' p6 H- [- @* _/ M. _, F( d+ x
MODULE_DESCRIPTION("Led platform driver");
& w1 e. Q* m+ F" ?MODULE_AUTHOR("Tronlong");
7 U2 V3 ^6 Z( _7 n8 M& p4 h, gMODULE_LICENSE("GPL");
0 w# R: h+ \2 A1 b1 E1 D3 P# c" b+ g* ?$ u5 V+ n2 A' }! l: f( `
|
|