|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 d+ @/ u8 u3 P6 m+ G9 c4 @$ C
#include <linux/init.h>' \3 N. \0 Y2 U- c, F3 Z: x% j6 J- |
#include <linux/module.h>/ s; o( h, q/ Y* o2 U
#include <linux/kernel.h>: r+ m/ m5 y3 o1 A* q8 K
#include <linux/types.h>
' B8 m, `; @. F* r* d# S#include <linux/gpio.h>
& ~/ G y' f! q g#include <linux/leds.h>; E( F6 s& S4 Z" F
#include <linux/platform_device.h>
+ x8 g7 {( I" ?; g8 c; r. ^( h% H8 }3 ^
#include <asm/mach-types.h>
( L7 m/ L7 v: y1 i y#include <asm/mach/arch.h>/ m% _2 n4 r0 }+ ]4 A( d6 s
#include <mach/da8xx.h>! y$ B# @4 {. [) Z% _
#include <mach/mux.h>* F% R$ [5 g# Y5 E) J
! r* d ]# X& F( S- f7 p8 S" O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" o' @3 F3 w/ ?0 y* \- p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ P2 T0 _% |* Z# Y# {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* n" Z7 }6 n& w4 t! H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( U/ f$ ]7 @% b8 y ]. x
) w& K8 t2 L- j4 ~: L" Q) g3 ^/* assign the tl som board LED-GPIOs*/
6 Y4 m! ^% m. K$ k tstatic const short da850_evm_tl_user_led_pins[] = {
* t( K G: x5 u0 q8 E9 e /* These pins are definition at <mach/mux.h> file */
9 r8 [ q: q4 b/ L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 e0 f& e% K- K0 }, f9 B, E -1
. G# k% H( K/ L+ y2 m3 }% }};: b3 x$ p+ ~* E5 g O. C
! c$ |" W# `' x3 O4 S' f' Ustatic struct gpio_led da850_evm_tl_leds[] = {
& G- D5 [" A% b0 M7 N {
/ h! B- t$ q7 Z4 u .active_low = 0,
% Z! p; j$ y5 S. M/ {; V .gpio = DA850_USER_LED0,% q$ Z( C/ B, L9 h
.name = "user_led0",6 q* Q. S3 S+ y+ B& d0 h0 v' R
.default_trigger = "default-on",
; L$ b: y2 T3 h( d4 I4 T& Z2 _- B },* `" `( }# ]* ^# l2 K0 Z& J
{
/ h% A6 o9 I6 ?/ c8 H7 d- F" O .active_low = 0,5 i& L" a& R# A/ Y S3 T
.gpio = DA850_USER_LED1,6 W- ]9 `# y/ H+ o f6 z
.name = "user_led1",
$ Y! J" L; w( e& R9 x' M .default_trigger = "default-on",2 Y: v: l9 T9 ~% E- [' Y U
}, C2 I0 w* d( G
{6 D/ y8 i7 Y z: N
.active_low = 0," d. t% @* ?, H7 a* E
.gpio = DA850_USER_LED2,$ ^( |. s# O3 s) p
.name = "user_led2",
" Q7 S" f$ g7 R9 a: o7 {' u& X$ F .default_trigger = "default-on",$ X. V% |2 U2 }/ a
},
8 S/ _& ~, I# c/ r7 e, u {2 ?& {6 b- W3 B) }* T
.active_low = 0,: i! f" x; ]* ~$ u" W
.gpio = DA850_USER_LED3,3 U. U3 l3 x4 r! I) o7 Z
.name = "user_led3",- k8 P1 m2 _8 U8 ]- E$ m+ t
.default_trigger = "default-on",# ~1 { _1 C# q0 z! M
},
' ^& N* }- m6 A};8 X& K* F+ n! _5 d9 M7 ?
/ L. j: I3 O8 N& I0 o5 Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ A9 F7 Q: F/ o8 d .leds = da850_evm_tl_leds,
4 D0 v9 H. T4 J- [8 K% B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- u- K1 f8 U H! u};
; o5 g& \' N9 [% ]( A( i! X8 x) N" X% T$ [( W4 z) Q
static void led_dev_release(struct device *dev): M) o" w3 K2 D3 F& z
{; P0 o! U( [* o) b8 s; K" ?
};- [, D. }1 [1 V% c7 O$ @: Q$ | T
4 j, j! o; Y* `2 E- u. E8 y4 X! }
static struct platform_device da850_evm_tl_leds_device = {3 I% I8 U' a7 @. u" W2 i
.name = "leds-gpio",
3 U0 ^* Y/ `4 _8 g, I" G .id = 1,- q9 M' H( _ d
.dev = {& w2 F& _5 K) q3 C& u' k; t
.platform_data = &da850_evm_tl_leds_pdata,
- g% |+ p4 Z4 D .release = led_dev_release,( i! F" i, B) G
}7 p4 C- I* t) A( K6 p; k/ v
};
) J H& G* j3 B6 X) U+ _ T! t4 Z$ [0 J* r* b+ P
static int __init led_platform_init(void)1 l& s& |/ g1 W/ _; z3 n
{
; m1 |, e4 i. v# }0 a3 ]: x int ret;# R$ J7 `* f2 K0 g; _( w$ [* P
#if 0
3 Z: Z& L$ `" U& ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) |5 T* [; t/ y$ m if (ret)
5 ?: g) s1 o. `0 @4 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% H+ S* C( F) W1 Y8 { "%d\n", ret);
3 J! g; Q! e/ Q: q( B$ ?#endif; b5 x! l7 ^0 y3 D: ^* X8 V8 g% ~
ret = platform_device_register(&da850_evm_tl_leds_device);3 ?; ~* C, q) u9 ~1 K
if (ret): K6 D2 p$ l" W
pr_warning("Could not register som GPIO expander LEDS");0 d# k( S7 O9 I) O' h* v: U$ d a
else
. g! H9 v9 d5 v9 |0 y5 x printk(KERN_INFO "LED register sucessful!\n");2 o. R" E) Z! Z7 k
: ]/ y( a( n3 Q* e return ret;
# }6 m/ ?, s1 H. ]+ O2 p}
% F4 S1 E/ U1 j) y8 f0 | Y# v6 I' Q3 ]
static void __exit led_platform_exit(void): U7 k0 c/ {( s! E% P- O3 t' s
{1 E. p5 F% E/ o5 b0 s% s6 C
platform_device_unregister(&da850_evm_tl_leds_device);
5 J3 b8 L, s) j( t
4 F: z1 S5 c$ M+ Y) Q W printk(KERN_INFO "LED unregister!\n");
7 h; y; |' f* v; `: I2 s5 a+ i6 v} f) p4 ]' u+ Q% W) C7 x# w$ L
* Z% y2 r% @4 Y
module_init(led_platform_init);
' K+ k2 a! k: C+ D& _8 Tmodule_exit(led_platform_exit);
/ E. A9 ?; |, C: P& A9 n4 m+ {4 ^
MODULE_DESCRIPTION("Led platform driver");# R( j/ V9 P T
MODULE_AUTHOR("Tronlong");# d' R: V7 B* Q6 f2 |/ ^
MODULE_LICENSE("GPL");
& d5 V g: Z9 U8 J q, s& i4 Y! v& S# C, u* c! o
|
|