|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 e) Y9 ?4 G8 Y2 J$ |5 |
#include <linux/init.h>
2 Q% e1 Z" B2 V1 R! @. n#include <linux/module.h>
5 |0 Y& T2 x J0 L4 b" e; k#include <linux/kernel.h>
: Z8 ~, n8 b- ~7 \6 b: [#include <linux/types.h>
% B7 m7 `" S5 y% w- D* G( d; t4 w#include <linux/gpio.h>% e2 m7 ~& D8 q6 G" H! P2 Y
#include <linux/leds.h>+ ^3 [7 ?4 Y0 K8 a. N) F
#include <linux/platform_device.h>5 z6 D: ]7 b( E& p8 C1 U0 e
M; I7 c$ T2 V9 A1 v. W! Z# V+ L#include <asm/mach-types.h>
/ J% C2 }) {2 e5 |# e#include <asm/mach/arch.h>! g. B' I8 U0 o
#include <mach/da8xx.h> S8 z7 X/ {: p2 l0 P4 m
#include <mach/mux.h>
. h' g! J5 |# M% Q5 V1 s6 t$ p
+ v$ t5 c4 J0 H* v, V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* R. n& X) x( A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 D: x3 ~% ^/ {; \9 W9 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ b: |0 _6 O3 ^1 l' @8 L# b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 |0 T2 e8 h U# w3 X
9 h s. `: Z) h/ g/* assign the tl som board LED-GPIOs*/0 [) J' |! A" K4 o8 `" k
static const short da850_evm_tl_user_led_pins[] = {8 p) ~4 r' U, W2 O; t
/* These pins are definition at <mach/mux.h> file */2 n$ F5 {% n' u' M* N, ~& ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 B0 z* o! V/ J -1: a* z. H% l" Z5 {8 I2 \
};! [; d& Z: Z7 V% w; g
$ @- r' x/ O; B4 u, H
static struct gpio_led da850_evm_tl_leds[] = {
# K0 A- K% E1 s& } {* F' _! A4 S% e. Z4 z7 F5 \# H( G
.active_low = 0,& ]7 D8 R+ w: e
.gpio = DA850_USER_LED0,5 ?* ~- T! H+ [& m: v2 q) [: @6 ^
.name = "user_led0",: ]* @2 ^' E. ^6 e7 b
.default_trigger = "default-on",: }& L* h( z" \9 m* @6 I @' Z
},0 x" X: `; _& I: m. ^. J( K
{
; g( ?& _' @/ p1 `1 x .active_low = 0,
, C% I7 Z9 }% B% J& d0 K .gpio = DA850_USER_LED1,' F; y; F1 @$ u3 i8 K
.name = "user_led1",
* _& a8 ?) Z1 Z$ [8 `( w. W .default_trigger = "default-on",9 G) V- e: Z6 `& {% M4 [. {
},
$ o. M! J, Q6 ]- G4 m* ~ {- x# Y1 K% U5 I9 v; I" p% {8 w
.active_low = 0,7 s' n+ g# C- B. V( [
.gpio = DA850_USER_LED2,3 d& t n6 m: Z0 p- v& L" w
.name = "user_led2",) z# M8 O; d7 z3 {) H# J8 [
.default_trigger = "default-on",# Q% A( L8 g5 [/ W# t3 {
},
5 D* x ^& T6 `" `0 K {
# y7 f+ F5 ~) T/ E l6 \# k0 l' q .active_low = 0,
! \3 B; ]! b& K% a3 \ .gpio = DA850_USER_LED3,% m) {; ?" ^$ w8 D7 o
.name = "user_led3",
$ Z) ?8 L4 E& u1 ~ .default_trigger = "default-on",
& A4 Q" P0 ?, z; T! { }," ~3 U8 G! c/ U/ G8 f
};4 E5 j4 p" y% H0 T' [, [6 x
% {3 l' n! P! }3 c: y) v `$ zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
G ?! w2 G3 m, L .leds = da850_evm_tl_leds, d7 G! `3 v) q: Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& N) Z: c! c& y# D2 m; u: { r
};% D4 k. Z6 f7 c/ D" m- \9 v7 |
% x w0 I+ r" ]4 M7 W; I4 Qstatic void led_dev_release(struct device *dev)
! j) g+ r* d7 `# a' D' f3 T{
# J# j; g7 `% U- J, Q};- Z7 X+ I2 q4 @1 L" O5 f
( \ g7 k; S" b5 p/ Q) Qstatic struct platform_device da850_evm_tl_leds_device = {* [" A7 r$ a" j
.name = "leds-gpio",
5 l' @ |, \( B [( k7 R4 M3 ] .id = 1,+ N( p: h7 _ _% X3 i, K1 s
.dev = {
0 q, [' H: X5 Q6 }# c( } .platform_data = &da850_evm_tl_leds_pdata,
9 L7 k7 H4 a" {3 Y. F: F .release = led_dev_release,2 ]& W+ T/ X- g1 Q+ r+ J) s6 v
}) T' Y3 ?2 W# b% h4 n
};9 O0 F0 v6 |" @8 S
5 ^' A4 p7 N7 V4 g, Z
static int __init led_platform_init(void)# C8 I4 Y( a8 n& o! O7 ~$ m
{" X' a" _; q5 d v0 g3 x$ ^) \5 B9 i
int ret;
: o d1 I U' j# f: Q) t* K0 ~#if 0
5 P* G# ]1 Z# f+ m. j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" p& ~3 `7 v) J& _3 j R5 D9 L# }4 I
if (ret)4 e' J* q: q. p7 P$ t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! E' W! g6 V2 r1 H9 i. f, k. [. q
"%d\n", ret);
E K9 T% H- c4 v#endif
. B; j1 ]% z% e ret = platform_device_register(&da850_evm_tl_leds_device);
) \# }: k1 l2 j# \; X# y4 }( } if (ret)' e f# E1 T' s
pr_warning("Could not register som GPIO expander LEDS");
; @! U* r% v8 t% m4 X1 X& X else
. s# L: E. K0 l O' R, g1 d, j0 X: w printk(KERN_INFO "LED register sucessful!\n");
6 y4 y5 }( T, [& J
_5 ]* K' q1 ?$ \0 `1 Z return ret;- X* ^3 \3 N3 ~. P1 E
}9 o# L5 h2 H6 z9 {) M+ l- r
+ c9 ` ]. ^0 R& j- i% b! V
static void __exit led_platform_exit(void)7 {8 A" S5 R8 e, i6 r; z6 H
{
. o. F' [( m# ]4 j platform_device_unregister(&da850_evm_tl_leds_device);
0 m6 Z8 G S& T8 c0 \& w# `1 P/ p2 X4 J- S2 E) u
printk(KERN_INFO "LED unregister!\n");7 K7 t' x& q6 F4 R. J
}
% h' A- f. ~+ g' [2 k
% d& l0 ~& M9 x: \module_init(led_platform_init);% k# F. C- A7 F& Y# a
module_exit(led_platform_exit);
- v5 f% w% j% h$ a$ j% E9 i3 q p5 z, _8 O" {- s
MODULE_DESCRIPTION("Led platform driver");
y8 E6 R, ^5 _& K8 @) G+ PMODULE_AUTHOR("Tronlong");% N/ F/ C7 z8 q1 _
MODULE_LICENSE("GPL");
9 ~1 k- u' y1 k1 r' y& j- F" l6 l) D, O9 w( \2 U
|
|