|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# g9 F" T3 n; H* H
#include <linux/init.h>/ H3 |2 o2 l0 \ l$ t4 Y7 r
#include <linux/module.h>
& c& [( o* p1 {% R#include <linux/kernel.h>
* G; ^1 a8 y8 h% I#include <linux/types.h>
% e/ ~/ W$ M0 z; O#include <linux/gpio.h>
& W8 G+ j5 ^8 {+ {, V* Z1 n#include <linux/leds.h>) O. |* ^5 ^0 X7 r, U+ h/ E7 b }
#include <linux/platform_device.h>
: m: E& m" c/ [( P* {" s8 H" r# i/ [2 C/ f: M! r
#include <asm/mach-types.h>3 F2 [8 \5 ~! E
#include <asm/mach/arch.h>0 r2 y% Q- T8 ^
#include <mach/da8xx.h>
- ?. d9 f: J; X. ^' ]1 N#include <mach/mux.h>& s+ A8 \: N+ F2 b8 ^
7 ?# l; c6 L, M2 F# T! n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); c$ f; j: C# c% z6 N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' `5 x$ \& d3 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 e8 W/ h5 {) B. `. p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 V' B/ x4 F7 I) m7 r8 H( A/ D- p
' p4 a& s0 ^0 _, X5 R# F/* assign the tl som board LED-GPIOs*/
8 x# O: D% k* B2 H/ Astatic const short da850_evm_tl_user_led_pins[] = {7 J! s" G: |& ]1 s% a( I+ n6 w
/* These pins are definition at <mach/mux.h> file */6 w& J1 q$ }: K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) \6 G( \' D6 Q; [; J4 ~1 e+ {5 g -12 l: @9 F0 k5 {+ R5 ^* S
};, k( R* d' m3 ^, Z( V1 K
" {: f# R) c+ istatic struct gpio_led da850_evm_tl_leds[] = {. e. v# K: Z5 y! D
{
6 C+ m1 O% u# w7 Y% f6 Y: u6 Y- i .active_low = 0,
: \- A$ l+ K9 v8 j# v1 B% a9 \ .gpio = DA850_USER_LED0, y# d7 d" M Q9 d
.name = "user_led0", I( H& U: M s+ S# G# D
.default_trigger = "default-on",4 e" p) _1 n* O! d, ^
},
8 g; B5 L9 d3 G5 S; U; M {
1 B2 V5 b% J& o! V2 t .active_low = 0,
0 Q* M! K; b* N1 ~, F3 k, ? .gpio = DA850_USER_LED1,1 f- h8 b. [' `) m3 ]
.name = "user_led1",
* i. I' r) ~5 c- m2 k6 e .default_trigger = "default-on",
! D% E% H6 I# C1 I' J/ G },. B. M! X$ [( {# b* _
{
5 f# K5 u- |2 h2 F+ ? .active_low = 0,. F% S( E/ r# h
.gpio = DA850_USER_LED2,) L( t9 ? O6 i0 W
.name = "user_led2",9 @8 a& ?) F! d1 z
.default_trigger = "default-on",
$ ?+ X, F) i: B1 ?. j9 \' } },4 Y3 E) @; z3 m/ S: v# E
{
+ C7 {* z9 |9 h3 _& y .active_low = 0,' [* t3 \3 u; p& j. I1 x7 o( d% x
.gpio = DA850_USER_LED3,
) s1 ~6 ]3 `, R& a+ J .name = "user_led3",
/ i4 {2 h9 j2 r/ q% ^7 G6 F' k$ S, e+ I .default_trigger = "default-on",# i4 m, W. i: l" l/ Z
},- \5 j8 P: c' K# |9 Z; X5 S
};: |" L! h' I% Z
- L! K4 e, E% |2 X% Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& S+ ]. P' T$ \( ]
.leds = da850_evm_tl_leds,1 x2 q! ~9 d0 j- P8 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) T, Y0 W4 z2 H};/ }7 L1 Q- {6 x7 v8 e' r, U
$ s ~& r$ t7 y, _
static void led_dev_release(struct device *dev)8 x: d: ]& q$ C& \4 p
{
$ s o1 S6 P9 h$ n$ H};
3 f! Y( w* j$ N8 E$ F0 i* }, |3 I0 B1 v4 O% r% O, w+ I1 H
static struct platform_device da850_evm_tl_leds_device = {
. m( e4 a- r% x7 O .name = "leds-gpio",
" w7 `2 Q' v3 i" \( u% `8 A Q .id = 1,2 l0 p) [: z& c2 H2 t
.dev = {
) X% d, h* M( c .platform_data = &da850_evm_tl_leds_pdata,# s) \; Q* z% g) ], ^
.release = led_dev_release,2 `' z. F" R" f, D& G
}
0 z% Z ^9 M) |8 d};
1 m0 t8 ~* }, S& e" Z$ ]4 r' @4 k
' R# o, z2 i* M0 {. F+ {4 kstatic int __init led_platform_init(void)( J; O7 F! b" {
{* A3 ?, J' _& Z* D6 B6 u {
int ret;
" Q& G' i, J+ \7 u#if 0/ A9 i* n- }$ ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 i h1 a! Q& b5 T, N( g2 b
if (ret)
& U( E1 X6 m% z; z( w- Y. M! z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. c# d5 \+ A+ l6 N7 `) o4 i- ] "%d\n", ret);
# m: l: W" V/ y: L! V: j8 R! U#endif
+ u( Z: V3 K# `9 Q3 L ret = platform_device_register(&da850_evm_tl_leds_device);1 z H& r u& C- b1 e% T7 L0 C
if (ret)1 ^4 S; R$ G0 p9 R* a0 q
pr_warning("Could not register som GPIO expander LEDS");
4 E" m% T# E! ]0 \/ z: e" }3 i% g else3 a( t5 ~9 ?$ [+ j/ B
printk(KERN_INFO "LED register sucessful!\n");8 Y; z8 l; D# A- t. S9 C0 O/ E
: v+ M6 P+ x" U( e. v8 X
return ret;! z* J$ T5 h$ ?3 {- f
}
{( b2 d9 }" q' Q7 l
5 L8 V0 E* [' {: f( X8 f0 q5 wstatic void __exit led_platform_exit(void)0 M4 |5 i9 o+ v# h& O0 V: S
{7 Z' a6 c( q2 M3 X- M. j
platform_device_unregister(&da850_evm_tl_leds_device);
7 p9 h' J) j" M% @( N; ]- n0 t2 S# J
printk(KERN_INFO "LED unregister!\n");
+ g% o# m4 O$ Y7 } j}% M7 |7 ?" D6 G/ s
# ~1 ^! ~7 b. lmodule_init(led_platform_init);
# \2 h4 c8 @2 i; x% |module_exit(led_platform_exit);' A- p8 t- o: A& t' T' @6 z; r
, N$ P; z+ U* S, H+ J) R* t# F
MODULE_DESCRIPTION("Led platform driver");
2 p4 F* U P3 F8 h' A2 pMODULE_AUTHOR("Tronlong");
+ D0 S; Z _+ ~5 oMODULE_LICENSE("GPL");: u/ n0 H% @+ ~; T
) T$ h& C$ G) o. ?0 ? |
|