|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. `/ ]$ x0 u: D" A
#include <linux/init.h>
' K6 [( M; J1 [5 s" O* r) C" e#include <linux/module.h>
: q0 q* c4 u1 Q3 g6 G' C. f- [#include <linux/kernel.h>0 Q* F) t% W% w1 X, Q
#include <linux/types.h>
: W1 w0 c0 Q" K7 ~* U" `4 T, Z6 E#include <linux/gpio.h>$ K" @4 ?$ ` P* R& z0 z$ H
#include <linux/leds.h>
$ @- E k' T' ]9 { ?8 s#include <linux/platform_device.h>
! f0 |; B' r- A. x/ P4 s3 G, `7 m7 j* ?
#include <asm/mach-types.h>4 w2 s8 N9 j/ y7 G; U: F
#include <asm/mach/arch.h>) g2 m6 a3 M9 M) x
#include <mach/da8xx.h>
8 ~5 I+ x- k- s k0 w; i2 J. h#include <mach/mux.h>% k6 p+ m! e+ |
M. ^: ?) d% c6 }1 x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" i6 D9 [6 t1 ]$ j9 i% p" B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ z O! F# `3 X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. y# E7 s# @; E* U8 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, }# R, ]- @ B# K( g8 n: ]; D$ u) I5 ?5 j# a( w: h
/* assign the tl som board LED-GPIOs*// c8 Q* p- K* \& T/ l: z% @
static const short da850_evm_tl_user_led_pins[] = {
5 M8 M% H6 W9 j; ?% G0 O7 n /* These pins are definition at <mach/mux.h> file */0 H" R& Q. h6 l/ x) V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 b u9 E3 B i" S" m: h' `3 V
-1
! C7 }) ~( O* ]};
; O: p9 p% a1 ?# _
0 h( }. [4 z, T- b* Z) z3 d% {static struct gpio_led da850_evm_tl_leds[] = {
, }3 i+ ~' L7 q# [ {# N4 o+ R# s- w2 ?0 _1 c7 G1 `
.active_low = 0,
$ I0 V9 G) i& v# |, J .gpio = DA850_USER_LED0,
( _5 _- X0 }: _5 s1 r- M" a' I1 H .name = "user_led0",
0 c' K) X3 ?, F1 V .default_trigger = "default-on",: p7 ] a) V2 A! j! P( P
},& l1 n0 T# l' I; w
{
. U1 I1 q4 w# p) b% |- N9 [% ~ .active_low = 0,9 b; ^2 }& O8 Y* F
.gpio = DA850_USER_LED1,
. ^" C' g9 w: a( V* P0 p. U9 j .name = "user_led1",
% |# L8 D0 A+ C$ q# }. w P& D! s .default_trigger = "default-on",
$ P7 Q5 s( p5 ? \7 V },
! ]& W$ [: z! H3 B! F! s2 \+ V' { {! |5 ~3 ~% _( |
.active_low = 0,
7 n/ H4 e+ X d: k .gpio = DA850_USER_LED2,0 D0 @! t/ g* `0 ]5 @1 x& E' o
.name = "user_led2",6 U' l* A* S: O' X8 H$ G+ c) L
.default_trigger = "default-on",, ^! [) ^3 _! z# y* H% V7 @# b4 \% O
},2 i4 N4 r+ d) W, G; B+ J
{( d4 P% ?! j- j3 T* Z; W8 ]
.active_low = 0,' ~0 p/ n0 q# F6 S& @+ e
.gpio = DA850_USER_LED3,
2 }1 E7 p+ N7 t. R5 {! Q .name = "user_led3",
( B9 b: D1 \- Q .default_trigger = "default-on",
- I* Z2 b8 m4 i ^ },. D& E. L/ [3 ~) a: H$ ?" N# i7 R2 K
}; d( o7 J: B; k4 I" E
3 x* @$ o; H# {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' d1 G8 u& v4 E .leds = da850_evm_tl_leds,
4 j/ R2 W5 d3 Z1 C' } L9 K" M/ U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 `8 J3 V) C$ m& }4 _% o; {. f# r# R3 N5 Z# b};
9 \0 r E7 C8 b2 u1 L" L$ A$ e
* e: p# F. B% b* F' i0 K: t! @static void led_dev_release(struct device *dev)3 f1 K2 A& i, l- A+ f+ r
{
d& \1 x, `/ A, j0 k8 h) J0 N};' z" s) A2 E2 v# W. B7 Z6 X
- D$ K6 z; s* b' n" Z# c. c6 P7 W3 gstatic struct platform_device da850_evm_tl_leds_device = {- w Y: d: r4 v6 Z1 I0 c/ n
.name = "leds-gpio",9 P; C. f8 K! D. b0 c
.id = 1,3 T8 ?' y1 B+ V+ q& Z, {5 n# s
.dev = {
4 c# d* G) _! V: `! c .platform_data = &da850_evm_tl_leds_pdata,
/ }" C5 c5 J9 I/ K& ` .release = led_dev_release,5 c, _+ }$ b% G1 A! V2 {! U* ~, R
}& g- h2 d, @+ l: f, @, v
};
6 H$ U) g* }$ P+ q4 v1 m+ f# e- d+ e& |! D
static int __init led_platform_init(void)
0 `7 y K& s& M( t+ j{8 l: l, e9 L4 n% b' T+ F
int ret;
9 _; l" K" \$ s# d2 W/ B+ l6 e- N#if 04 S4 g \1 L2 C2 B! G) ?6 P8 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 W9 E2 y$ p: Y t
if (ret)& b# d- T) P! e3 e/ v0 T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": J8 |' p7 t5 C8 n" |# ?, v. n
"%d\n", ret);
, o; w& ], e% f+ ?0 L. d#endif
5 ]7 i* j6 F* q5 M4 u& y+ C ret = platform_device_register(&da850_evm_tl_leds_device);
/ D) Y: s; O/ I. Q% _' e9 @ if (ret)5 J Q" h+ p, K
pr_warning("Could not register som GPIO expander LEDS");4 w- Z0 j. K& G- q& ^8 m
else
7 d# q, ^0 [" r) @; o3 \$ v printk(KERN_INFO "LED register sucessful!\n");, M! ]7 p* `% O6 F, _
% t+ d9 K* t, D3 ~: x1 V) F4 e
return ret;2 H" K& A( }2 s' k
}0 Y4 G" [; F$ r3 _
' o% r/ x& p6 ^( H5 o, ]! kstatic void __exit led_platform_exit(void)
) e# K" G7 i1 K, V+ @{. e) D6 j/ h6 U/ ?, y
platform_device_unregister(&da850_evm_tl_leds_device);( ?2 w2 M- K4 X+ g0 r* t% F3 L
. {: J; C- V9 \+ c
printk(KERN_INFO "LED unregister!\n");
* ~+ U8 l4 z# \5 T8 T}" S9 f0 j2 H: I( N
" Q; v! I0 ~9 u! Z: k1 L) r+ gmodule_init(led_platform_init); C" t+ L6 o/ j' o5 O
module_exit(led_platform_exit);! e* B( H3 f) F q
$ b* M Z+ {- }# X/ l( F
MODULE_DESCRIPTION("Led platform driver");8 P8 Y0 j0 a- K5 B. g# _4 A& `
MODULE_AUTHOR("Tronlong");4 Q! t; Z1 ?4 X
MODULE_LICENSE("GPL");5 ?- m. e+ v$ x
: A2 V* ]: h4 S
|
|