|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 R# @3 R/ {7 |+ l: X
#include <linux/init.h>0 B' G, i! M5 l
#include <linux/module.h>
7 ]. k5 t" j2 L#include <linux/kernel.h>8 d, u7 u4 l, f; r2 \4 {. L
#include <linux/types.h> R# d: u u2 T" O W$ q
#include <linux/gpio.h>
) |+ ]; o8 `# a* y2 H#include <linux/leds.h>2 a- h+ [2 W) e) s n, d2 H8 |
#include <linux/platform_device.h>9 m& G9 g, {% N' `* }% ?
; ?2 A# T( e8 T2 W0 p$ u) M
#include <asm/mach-types.h>8 {3 \% Q8 V% p1 T+ k9 Z2 K
#include <asm/mach/arch.h>
; f9 x7 X5 W# t#include <mach/da8xx.h>
4 x; J% W+ J& Q3 `# d; U; V#include <mach/mux.h>
1 [9 H6 E" x, m5 V f# |3 e0 x; _8 C8 S# n3 }6 q8 w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) u' S) E* o" R5 S( l- P% i# i, U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 H- Y7 ^9 ?- w+ h8 [0 U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; G1 U( v2 C& Y' q9 `' v- M; i! b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 n0 r, K) T- g
: ?& I0 A, N+ @4 k4 p/* assign the tl som board LED-GPIOs*/
/ j1 p# M8 P* W1 X) sstatic const short da850_evm_tl_user_led_pins[] = {% V% n: J. ?2 r0 O" _
/* These pins are definition at <mach/mux.h> file */
, T `/ A4 l/ _6 {" z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 Q$ u' K# @" ` K6 p6 a
-1
$ w- C' j# g' |! i" @};
7 w3 B/ L$ ]( b1 A4 P5 H/ F% X8 Z; r; W6 s$ L: P: H0 {8 w* w1 v7 r
static struct gpio_led da850_evm_tl_leds[] = {( C. c" e4 |* j$ R$ n4 H* I
{) d/ R2 R+ t3 H4 t o4 j6 K
.active_low = 0,! C+ Z) @$ w& h, n; v |
.gpio = DA850_USER_LED0," e+ @7 @' D8 }7 y
.name = "user_led0",* K2 G9 `' y2 {- t0 y& C5 [1 {
.default_trigger = "default-on",
& \4 M& x" A. y& ~2 D: V, M },7 e$ \, p0 L L" Y' C; U, C
{
1 ^* N3 _. Y; ^" V .active_low = 0,
. \5 i, D% o3 j3 Y) n .gpio = DA850_USER_LED1,* T {- t M i0 p8 [' v
.name = "user_led1",
9 s# S0 R$ h8 B1 Q7 d4 c .default_trigger = "default-on",
* d# L1 _" |* T8 ?7 y },: ~9 X& `7 E5 p; H( j2 L2 y$ c
{8 V. h8 i+ h% [# M) ~3 S0 i
.active_low = 0,! k4 g( ^0 _* t7 e
.gpio = DA850_USER_LED2,8 B" |6 F" w7 A. s; j, g5 Y
.name = "user_led2",) Z8 D/ D% |) C/ x8 ~; k2 a& s, y
.default_trigger = "default-on",
$ V+ _# K) o2 C+ D I4 n },
0 }: x. B$ W) ^) {% l {& r& `" l: c5 w
.active_low = 0,
7 V6 l+ ~* {$ Q. l5 w .gpio = DA850_USER_LED3,+ a% B9 z; T5 \2 v, S& r* n
.name = "user_led3",
# v3 I7 G) S& ]/ I .default_trigger = "default-on",- ^; A: I6 b! `0 h9 k& k* B" \
},
6 O* t9 o: J6 i! ?' e" K};
# ]' k8 f q' P9 f- p
N3 e3 M7 B" R8 \& Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 }) _) P+ n$ |' H4 Y! g .leds = da850_evm_tl_leds,
, i7 |8 }; D) z N" a* P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% Y- l) `2 e; Q& G};' t, U h2 X' h6 C$ |3 N- }
4 M' T h' F$ F- b( H f- zstatic void led_dev_release(struct device *dev)
% i# _2 b# B: i m{- j [# L% V; a
};; N* s! C; d3 t* ~ _# }1 r1 [
9 t, o( x8 W9 j4 l: q4 r, g% h
static struct platform_device da850_evm_tl_leds_device = {( q& M: Z c9 S* h$ R
.name = "leds-gpio",9 h% q8 j5 C7 w$ f# V
.id = 1," k$ g( M2 a) P
.dev = {
0 \. J: ?. }$ T, K5 J9 Y8 \ .platform_data = &da850_evm_tl_leds_pdata,1 k2 T8 h9 F# Z/ H& g8 f' v
.release = led_dev_release,
" q1 R$ x' @$ Z% D }
9 b! A( e9 [& ^$ T8 t! ]+ ^};( k: f( c1 W% |6 k
; K4 \$ X# Z0 K- v* y& W3 i
static int __init led_platform_init(void)
. @9 X3 t, @3 F d6 [4 M3 b+ q* r( [{
5 |" U) J3 N( L6 @4 S" W: z int ret;
& g' T8 I6 {1 I$ e X/ C2 r#if 0: d! |0 @5 e: [, l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 p0 ^6 e# ]( L- C! _
if (ret)
$ ^1 O' B1 P F" \% _9 x: Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& @' X9 F$ ]7 }2 M "%d\n", ret);
" E: |6 Z( {+ d- D4 L#endif; k8 y% V( r2 A/ K$ t9 B: @$ ~
ret = platform_device_register(&da850_evm_tl_leds_device);
) Y3 F2 j, F; _& f/ d/ O7 } if (ret), I3 e9 j; {$ w4 r* m7 ~
pr_warning("Could not register som GPIO expander LEDS");
9 J! }* q( f7 ~! T; @9 L G% S- U else! o5 `9 ~1 c) F7 Y
printk(KERN_INFO "LED register sucessful!\n");
: b. J8 F4 C$ s5 t9 m3 G
2 K6 U- e. f' Q" F! Y return ret;
% T: \8 Q. ~7 Y4 Z( D/ W}
8 g. J( r: q$ v& A9 o: L* D T9 Y; U" j5 I. D
static void __exit led_platform_exit(void)
. i+ s: g$ B3 u/ V, U$ F{% ]3 X1 T' c0 _
platform_device_unregister(&da850_evm_tl_leds_device);5 x4 o: J6 t' o+ N6 F0 R
$ L- D. V) @: @2 p printk(KERN_INFO "LED unregister!\n");
% R: o& h! _" U% K/ _/ A8 o4 G* U# j# o}: l; }2 q% [- V) u
I# k7 t4 T- N# Z. E; `; w" {module_init(led_platform_init);
, E/ z3 z0 \, e0 U5 v1 Kmodule_exit(led_platform_exit);
+ U' a0 s7 B# r$ S2 \* R0 A; h! c) v2 B# M8 }# ?4 x! Z
MODULE_DESCRIPTION("Led platform driver");
6 c, i1 q, D. X2 Y) iMODULE_AUTHOR("Tronlong");7 ~8 h) y9 r, ^5 d
MODULE_LICENSE("GPL");
# y! z% ]0 S/ _( V& \- G
- j9 P: R/ e' {; D) Y# x3 V$ z |
|