|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' D: k5 a7 _& t" J* r @& o#include <linux/init.h>$ g8 g. h: p# B# D: _3 \9 Y
#include <linux/module.h>
/ y2 M) }; r7 D5 n' ?# |* G- S8 c# w#include <linux/kernel.h>
* W% [. x$ z& g$ K( _: O3 L# p#include <linux/types.h>' k. y0 y; ]+ ~" Z$ p2 M( n% R: p
#include <linux/gpio.h>4 K, @, {' Q; r. q: P9 f) v
#include <linux/leds.h>
2 P! n& H6 }. J, U#include <linux/platform_device.h>3 ~6 o* b, s) {- k! O8 h
( T" M! {5 O5 }$ c
#include <asm/mach-types.h># g: `+ k" ^3 ?) F* s
#include <asm/mach/arch.h>* i! F/ C ^- A; F
#include <mach/da8xx.h>( A, G4 {9 h2 j! |6 A
#include <mach/mux.h>8 v, u0 O0 ?( ?/ k
# t1 } S' ^" |2 W/ T( [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( D7 Q6 d" B8 \$ o6 P( H) \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ {3 @/ E2 b- b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ j& @8 {3 s6 `6 ?$ H+ Z- a0 i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' G% ?' v7 i7 e [- p
: ]1 m3 @6 z) t3 v2 Y7 P/* assign the tl som board LED-GPIOs*/
! K6 N( g: |: }5 z6 W# h3 \3 Hstatic const short da850_evm_tl_user_led_pins[] = {: c2 g: l- ?. d( @( P( I# s/ v
/* These pins are definition at <mach/mux.h> file */
3 v/ L- M. u: W7 Y1 f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 _, I+ l0 h# ^- w -1
- \1 G; Y* M& W& V; C$ u};9 _+ u0 u3 }# e, _1 S$ E- T
* F! o9 H- A( k0 {) {& istatic struct gpio_led da850_evm_tl_leds[] = {
; c; v$ |) f* b {/ B9 Y0 n, E4 P0 @+ _
.active_low = 0,
' R: X6 a, `6 \ .gpio = DA850_USER_LED0,
% y6 Y0 q6 |" c0 [& V .name = "user_led0",% `% V) ?& w" I3 z9 R, a) u5 l1 s
.default_trigger = "default-on",
& g% B; Q6 c# V3 X. h },
1 O$ W% H& p+ x2 B n. W, o. W: R {
1 x4 [- p9 D) F0 f6 u; O4 z" E$ w .active_low = 0,8 {( b# J* {. K M' ^& S' `
.gpio = DA850_USER_LED1,& f; N4 _# L& j7 t
.name = "user_led1",
8 v% W+ c" J6 Q8 E- M: R& c1 A2 x .default_trigger = "default-on",
: q' E/ Z4 Z: t, D },
" E* S# k5 M* v2 X! j7 y2 g& X' w {
( g% m7 W; u2 p B0 F .active_low = 0,
* H8 {4 f8 x% _* N; V. {( H6 o' R .gpio = DA850_USER_LED2,: u( D' n% k8 J+ r1 A+ [7 q$ ~" N
.name = "user_led2",8 h: \2 o! q4 }4 n7 F/ q# `
.default_trigger = "default-on",4 \- h/ ]5 u/ s6 j( o
},
3 I1 |: S5 t$ W/ S% ~3 L3 h {
: @! R0 [% s w- W, y8 K .active_low = 0,9 z% q% P! N. B
.gpio = DA850_USER_LED3,
- @1 w: {: _8 b/ _0 } .name = "user_led3",
7 S. K a0 K* u: ?2 Z% R .default_trigger = "default-on",, b9 O+ {8 B+ Y) q0 s
},2 {! l+ ^# ]/ u! H1 [; `- v Z
};
) W$ b- D4 H7 s$ X
7 W4 w3 F" r3 d9 Q8 D; estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( Z" E: y. z+ g. Y
.leds = da850_evm_tl_leds,7 W+ m: }, t+ {& ?& I& g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," _3 x1 r' s/ J6 b
};: ~! P$ L G/ c2 G+ ~
5 s6 _" p# N0 i% O9 ^1 T: d) R
static void led_dev_release(struct device *dev)6 w& h/ I. `# l! v4 N0 {4 }1 g
{6 ^/ i# g ?% @" E
}; f+ S4 q! V$ V- G5 z. m' B
( D' p( \- L2 y I6 _+ z$ Pstatic struct platform_device da850_evm_tl_leds_device = {" _* j$ e+ t. W. W% p0 M
.name = "leds-gpio",4 O$ Y! h, F9 F, `
.id = 1,! L* u7 U; p8 \, b4 J
.dev = {
) b |& U4 l) w2 q$ o" s# Q* c .platform_data = &da850_evm_tl_leds_pdata,
/ M# o. H' J) u# w, J; Z .release = led_dev_release,
1 H3 P: l- [! A( C9 ^ }- a" T( A0 D% V0 r
};
" J+ e6 ?# T) x, u( ?; F7 U3 ?" T# c, B# a |4 {) R# I; h; r6 D
static int __init led_platform_init(void)
, n" N" p4 p" c& g4 f9 f{
0 L3 X N. e( Z0 z# J int ret;% p0 N* |: p9 z( g3 y
#if 0" ~- S: [2 x4 h. y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 _, [2 `2 g' L) P( h/ @7 ]3 p& ~
if (ret)1 Y2 ]7 O( ^6 W. t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! K6 G) H" j; B9 p1 {! X "%d\n", ret);; I0 b( G- H+ M6 C5 s' j
#endif2 H" b9 s) v- k D
ret = platform_device_register(&da850_evm_tl_leds_device);3 }4 t( ?. M# ~' h
if (ret)- t) B2 |8 [# h: i& p
pr_warning("Could not register som GPIO expander LEDS");
0 i& d D, n* ?' d0 V! L else
# l& a, C0 k# Y& {& N printk(KERN_INFO "LED register sucessful!\n");
/ p e& \* T% z8 V: C4 S0 b* h1 K
3 c' \7 ?) {6 b4 s" B4 v return ret;+ G( I. t( Y. i
}
/ _: A$ u5 t2 I2 Z$ |8 E
; h, O: S( N0 h! T3 @static void __exit led_platform_exit(void)8 @( q9 C+ ~% I: A+ t% l
{
# }" v( _4 l% a! k platform_device_unregister(&da850_evm_tl_leds_device);
- W I9 H j7 g5 V
3 `7 @/ K/ n6 N4 \7 G0 |% f" g4 Q printk(KERN_INFO "LED unregister!\n");
2 `8 d" A0 G6 C" m& C% P}
3 T- y, Q1 O0 J, Z5 c* t- }
* ?* Z* o4 x7 z2 g' mmodule_init(led_platform_init);
: p. g) R2 Z7 [* \% v' a ymodule_exit(led_platform_exit);
: p% c0 N. j' ~1 O8 B% G9 K3 ?
& W1 g- [. W( X1 m, Y4 SMODULE_DESCRIPTION("Led platform driver");4 @* O+ J7 s( |) i# R6 g; Y `: ?" C" _4 T
MODULE_AUTHOR("Tronlong");
( f8 h( Q5 O6 r9 Y% K9 A, UMODULE_LICENSE("GPL");% s: B* S+ E( [; E4 U
8 x4 F% V, I5 x# ?
|
|