|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. W! k- H& {7 ?8 c4 B f2 p
#include <linux/init.h>
6 e- @' b1 W/ F6 r#include <linux/module.h>
) F3 U0 u9 j( L1 g8 ^# m8 ^* P#include <linux/kernel.h>
3 T- G. r0 u2 Y#include <linux/types.h>0 L% S9 A9 u( U) a
#include <linux/gpio.h>+ X: t3 g- v6 D
#include <linux/leds.h># z1 n& N. I f* ~- w
#include <linux/platform_device.h>1 \5 d: R2 ^) `8 z! e8 ?% s3 F8 ]
. o7 `8 B& e f& P8 G
#include <asm/mach-types.h>
0 k' W! ~2 P+ O/ ?, e. U6 T6 k8 g#include <asm/mach/arch.h>
/ f, a9 L1 K* n' d#include <mach/da8xx.h> F/ O% w' v! o8 M* c
#include <mach/mux.h>8 O7 q2 ]1 U3 d
# I9 D0 l; j8 W: C/ W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% D- v. J) Y5 }& U( d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ C- a" C9 B, u9 }! R% |: y9 O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ x5 L( I, E1 W7 Z0 u( u+ N0 {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 z7 k/ \) u: K0 \( H; v
- {+ O! |) [' @9 c) u' ^/* assign the tl som board LED-GPIOs*/
' u6 t$ S! \! Tstatic const short da850_evm_tl_user_led_pins[] = {
- [& X3 D1 Z* t6 p /* These pins are definition at <mach/mux.h> file */( J( o& S9 m) [( d5 Z% C( v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 B L- G3 E0 L -1
. g4 m( X+ P( a};$ x8 f: A5 k' U
7 F- R- Q# [2 x! hstatic struct gpio_led da850_evm_tl_leds[] = {
+ Y" v$ ~3 m0 h+ g6 ~ {4 X. N0 @2 | x9 A/ a8 D3 |* E
.active_low = 0,
+ s- f: r. H/ r7 [1 S3 d .gpio = DA850_USER_LED0,
; f$ G9 g/ s* a$ d0 Z' l' u$ l* a .name = "user_led0",
0 d9 ]1 Z! x# V1 H6 ] .default_trigger = "default-on",
9 d4 \# f3 q/ ^; u },/ G& z- Y1 E/ r/ x& j# R. N$ S2 P& B
{, H2 D8 _, A+ }' ?2 S/ k
.active_low = 0,2 _8 H& ~# k3 z& L* U" _
.gpio = DA850_USER_LED1, V: m# z! E" @+ I
.name = "user_led1",: D) u# C5 @0 }+ y
.default_trigger = "default-on",
' y0 ]8 P, Q6 b; Q0 e },4 h& [6 X s% j& u
{& Z9 @5 A3 k |/ ^
.active_low = 0,
# s% R+ a4 |3 {4 u; v/ @2 u .gpio = DA850_USER_LED2,- G& O& V; k7 f: V5 g0 T
.name = "user_led2",* k1 p% |" T1 b' h
.default_trigger = "default-on",! ]. \& F7 G6 b
},
, D" ~, W* O0 H+ K {1 C) b+ h0 `) W% h+ W6 Q' }
.active_low = 0,
) }6 k1 d% [1 w0 Y$ _ .gpio = DA850_USER_LED3,6 F- O4 K$ E" J0 J/ w8 a0 Z
.name = "user_led3",
6 {9 H5 n Y/ x( Q8 h# C$ t .default_trigger = "default-on",
" c7 D1 T0 X( y },
, V+ r# P) l" p& U};
% Y9 G5 \3 Q2 h8 N% o
: a4 j& i; M9 w. mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; f; i; Q- D1 E' W9 z' m' Q .leds = da850_evm_tl_leds,
% n2 ~9 \" m3 [6 z+ k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* L: s# \4 ~' }};, t9 Z3 h0 B/ G5 b2 w; D
- L* p7 d L% Y Y5 e
static void led_dev_release(struct device *dev)& Q$ g& m; M+ n2 c
{
" F' B/ x6 _0 [+ L+ k3 f( j};
, S9 G5 t/ D1 v# u$ ]0 i
- |& X! P5 {4 [8 zstatic struct platform_device da850_evm_tl_leds_device = {
& z7 n( V2 k/ B" p* }4 k2 t .name = "leds-gpio",- ?8 l: a8 C9 T; O6 x- w
.id = 1,0 z, p( k: q3 w) I# z- o6 x7 N
.dev = {
3 `* `1 e9 D9 M; ]/ q+ y, C .platform_data = &da850_evm_tl_leds_pdata,) H' \- S+ t8 L' {
.release = led_dev_release,: d1 Q+ M, e0 c# K! Y5 P# {
}
/ y. x; a1 A: q$ Q+ L$ O};
8 u5 @, W# Y) J O: @ F0 D) U8 a1 Q0 v7 q1 b' h$ h( F
static int __init led_platform_init(void)" {/ ?, ^7 |; B7 B& f
{# p6 J8 }, v3 l7 q2 I) c0 s
int ret;
, H3 x' t) j( i" R3 r#if 0; v v, {) D' A6 `! l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 _% O7 G. l, H* ~# A' o if (ret)( g7 E+ H, [7 ~, n0 f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& ~# R$ Z j5 \4 c "%d\n", ret);
2 j7 v- k/ t, s#endif1 C2 {, S8 s; L) h' ?# x" u' c
ret = platform_device_register(&da850_evm_tl_leds_device);
+ [0 H3 B2 B" x- P9 ^# O& i0 M if (ret)7 O0 W. E% s* p$ A, v) V3 {
pr_warning("Could not register som GPIO expander LEDS");
5 [% j9 C( X5 b5 o" y h else
% A7 y/ V9 h! e9 q7 L9 c3 q$ ~& G0 T printk(KERN_INFO "LED register sucessful!\n");
! I- f- \/ ^, W* F. X$ l* u3 z' z. Y* F) S) u" t
return ret;" k3 j6 q' W# `0 Q" F5 h1 o
}+ C H& ~/ P, O& ]3 k
$ g2 I5 W# S& w- l5 a- M
static void __exit led_platform_exit(void)
9 M0 \3 _! w& I( X5 e' j8 H{/ C0 Y9 B8 ]8 u/ U( r0 Y$ z# W# m
platform_device_unregister(&da850_evm_tl_leds_device);& I$ s# t: p# B0 [, M4 }4 I
8 C/ M) ^% n7 `9 _$ i0 M/ P
printk(KERN_INFO "LED unregister!\n");9 b+ d8 e# ]/ g% j1 s6 E
}" }: v0 T( `( P3 @0 C
6 F" r# B4 a, e1 m4 W ^8 b6 Q: _module_init(led_platform_init);) f- G* H u4 |6 k+ D0 c
module_exit(led_platform_exit);- A, k- _) U- P; C% `5 B+ X' }
6 c3 }: ]' i; ~! o& S! c) bMODULE_DESCRIPTION("Led platform driver");
1 H: T& @9 r# G3 T- z3 QMODULE_AUTHOR("Tronlong");
8 J, X4 d! f( m7 z6 r6 QMODULE_LICENSE("GPL");2 g1 s$ R& E0 J$ R# ]
6 Z8 j+ @ B3 `
|
|