|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 k& C4 ?( Q8 a; Z! w+ e2 b8 ~#include <linux/init.h>: W# S# e' X9 P: @" H
#include <linux/module.h>
1 M$ @) E6 C' `& r2 D#include <linux/kernel.h>- ]/ w4 G: B4 t; G0 [2 A% u
#include <linux/types.h>
2 b3 ^; h# C2 F4 ^4 t0 ~2 `5 E#include <linux/gpio.h>
. j9 a( N* [" V' ?6 p#include <linux/leds.h>) ]1 \. F5 ` R% l2 W2 m
#include <linux/platform_device.h>
O1 A& B3 ]) P9 T$ v- a# {- s& z" C5 n% Z$ r: C" h; ?
#include <asm/mach-types.h>0 m! ~; V% S: K! o
#include <asm/mach/arch.h>
B' Z9 H" R# o: T! m#include <mach/da8xx.h>' s- ^' X! F: `. ~. F6 g
#include <mach/mux.h>8 u$ _) e" u5 b0 a
4 J! ^1 n% |' R; i+ F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 R Y6 h) t. P, Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; Z5 j6 Q- b5 U5 G* J. k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: Z8 j, G4 k9 ?; G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& {0 R' Q3 {( J' Z; Z- g7 r, s7 n/ Q4 ?8 @
/* assign the tl som board LED-GPIOs*/4 y A! s5 k p- L P% |6 j
static const short da850_evm_tl_user_led_pins[] = {
' u6 r4 V8 Z& ~3 h6 A /* These pins are definition at <mach/mux.h> file */0 F0 U+ f# c' G' R2 S$ V' {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, ]" z. a# I0 P& H8 I Z7 @0 L
-1
; l6 o% J( p% Z7 d' @};" ~" J/ c" Q; ~
7 X3 B. |: \% L9 w9 x0 D
static struct gpio_led da850_evm_tl_leds[] = {
2 X* Q& n: b- Z K" c, f, q1 n {! g& h6 X8 `# y
.active_low = 0,6 o8 _' t3 j* \4 N! M: g
.gpio = DA850_USER_LED0,! Y, i: O! f( x3 Y- C
.name = "user_led0",/ Y; j2 S k7 B% U
.default_trigger = "default-on",' B) Q: g/ I0 C& a7 N9 k' o$ e
},
, r8 A0 q% z) G1 m! z* I3 Q {0 c' V' k! w1 M+ d; f8 R
.active_low = 0,$ ]" O' }2 b& W) j
.gpio = DA850_USER_LED1,
' c8 i' z* i5 }) e2 w .name = "user_led1",
# ~! ?9 `) b% u0 u7 r .default_trigger = "default-on",2 i3 Q8 E6 D, N
},. b* [+ {' `+ O6 X) [ J
{+ Y- {3 x8 {0 `; r' H, ^
.active_low = 0,/ I) C4 U* Y* a z) Q
.gpio = DA850_USER_LED2,9 A! O: n( y* ]" l9 N' F
.name = "user_led2",
3 f1 x1 W0 X6 p- }/ `1 | .default_trigger = "default-on",
4 N4 q+ g8 M9 P9 i' K },
; a& _5 p- f6 `/ O" ~7 w2 i9 K' w {
# N+ r' \9 g! \. Q$ l6 e .active_low = 0,
3 Z. q' T3 p+ l7 N; T+ m( R H .gpio = DA850_USER_LED3,* u( y; d8 W+ a9 N% a# V; V
.name = "user_led3"," ?0 }) }1 m7 h
.default_trigger = "default-on",# u; W: ~7 k' [( y% y8 V' k! V
},
- Q! l2 ?5 m( I m" E! y};( [, L2 }- q+ b3 d
' v$ a: e% |; X0 V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ J% z! {0 W& k; y+ F .leds = da850_evm_tl_leds,
0 O N$ q6 l# r/ l+ P2 J! K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' o y* i0 O+ \# C0 {! O};
2 J7 L% p$ O4 |8 w7 z( N- w3 G. u' ~& [9 Y
static void led_dev_release(struct device *dev)
! Z" }& K% X0 y{3 Q" R2 ~ Y$ P8 z0 K* V/ I
};0 x9 k" F. G& O6 m, e1 P( M1 P! _
8 \. C) o2 \3 q. c$ F U
static struct platform_device da850_evm_tl_leds_device = {
$ y8 H* A+ [0 o- G$ v0 B4 g .name = "leds-gpio",
* P7 j/ u; ~5 ~ .id = 1,
* q; ]' a! c. g( ^8 w( b% T .dev = {! l+ v& N1 s, A9 K" p; X
.platform_data = &da850_evm_tl_leds_pdata,
2 Z5 w$ _) ~8 C( r1 @' z .release = led_dev_release,
# S4 g* ]; r1 e: d5 v9 B }
4 U& n8 Z3 M: |' J" |2 y1 `};
( \8 a) ]9 w/ [) ~* k7 J# z
& R# j9 t" k7 E2 I" K" t9 D7 s9 w# tstatic int __init led_platform_init(void)7 p, ~3 e" [3 u& n
{1 c4 ]3 k7 H5 K5 i9 V
int ret;
" C$ o$ p( E7 z& S! V) L#if 04 U* S# ^: B, p" Z0 @: U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. W; ~8 W. d6 a% n8 p4 }% {
if (ret)
$ ]( b2 u. K1 Y' H1 ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 S, C% {1 K0 L1 `( J; R "%d\n", ret);
& }! Q7 H& V+ X3 y$ r#endif
: Z/ y/ `, O6 J2 X; P ret = platform_device_register(&da850_evm_tl_leds_device);& ~" ~' h! ^0 P4 g. T. X+ P
if (ret)- Y/ t8 z4 q6 ~1 D) x# }: R
pr_warning("Could not register som GPIO expander LEDS");; I5 m4 G, {- u+ K
else9 p2 O' }" y6 S/ G9 k
printk(KERN_INFO "LED register sucessful!\n");: k/ a; \2 A' V4 u5 ^8 L
' l, k6 \2 q: T4 K- d% y# a. I return ret;
: i" k$ X, |* T3 Q}! ?8 f! j; F. e' V3 G
R+ v/ Q' ]" t& `8 b1 Vstatic void __exit led_platform_exit(void)1 M5 R' P2 {; Q# W
{
$ @5 k/ X4 h4 Y# ~ v9 E, d platform_device_unregister(&da850_evm_tl_leds_device);6 j7 ?4 k8 x" {: ~
9 G( R. o$ M! d6 p: K printk(KERN_INFO "LED unregister!\n");% U2 I! H7 v; Q+ v
}7 _, @; T/ b* F+ \. K6 D
2 H, U/ b/ @( g" bmodule_init(led_platform_init);1 d- M( @! T9 w. s" _
module_exit(led_platform_exit);4 Q: {) X1 R0 u& m
5 Z' V0 h$ ~. M/ ]& nMODULE_DESCRIPTION("Led platform driver");9 F4 G7 U6 K4 j, D
MODULE_AUTHOR("Tronlong");2 z# {( r" D) d& n
MODULE_LICENSE("GPL");
+ {/ ^4 W" x- t3 z2 g+ G; N4 A6 [& e4 L. T9 I" s) B0 A) `
|
|