|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* T& D) f; u, v# |6 J
#include <linux/init.h>" r1 b7 T$ b+ L* |7 F3 X
#include <linux/module.h>
6 ^! g; ]9 S) s: `#include <linux/kernel.h>
; u6 X8 n ?$ _5 }$ U#include <linux/types.h>* B& y9 N& f: w
#include <linux/gpio.h>/ J0 f" [4 {% _3 w; A
#include <linux/leds.h>
& M8 @, x7 o+ V9 Y: p#include <linux/platform_device.h>6 S1 I" r7 z$ v( g g
+ f& x+ _: i( V; f; x" r#include <asm/mach-types.h>
* V. n$ _& K7 M/ [2 E#include <asm/mach/arch.h>
% X4 A$ |" ~1 l& a#include <mach/da8xx.h>
, y: n5 o) M1 X0 ?' r! D#include <mach/mux.h>6 \" i# {! R* R$ c% e2 z5 ~; Y
4 I. h$ c4 s, O5 k0 h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 l& f& E9 D+ g' c$ J @5 T4 a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 L% O$ X2 A# P0 R2 @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 P% W, u) }9 e9 f, u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 d# n% u, n4 w+ o# z' x7 I
+ v( ? t+ v- Y8 p' E5 m* h& Q/* assign the tl som board LED-GPIOs*/
" y, |; b/ N! ?9 ^static const short da850_evm_tl_user_led_pins[] = {
9 w" n1 e# G6 b /* These pins are definition at <mach/mux.h> file */
& Q& F7 v) L6 O+ e6 N/ D6 t' } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," `* ~' F, E8 |6 ]
-1
+ T4 ]5 y- [; _) ~6 j};
+ D# g( i* e: G: P5 y1 J6 J3 E' b. w8 G8 [
static struct gpio_led da850_evm_tl_leds[] = {/ w/ o4 ]5 E5 F. F: d
{
( z. V* V9 L( S .active_low = 0,8 v7 `4 C' ]( ?, U% E9 s2 l9 G
.gpio = DA850_USER_LED0,
5 p4 d6 ]# ~. o# i4 S# @4 E+ i .name = "user_led0",
! r! L0 _. |; O .default_trigger = "default-on",. G5 Q+ m! P. Z1 r
},. Q) g) K% o* p8 I5 Z6 s
{# O7 r/ f% f; U' |, f+ [
.active_low = 0,
0 t! ^) t( O. R .gpio = DA850_USER_LED1,
! |6 k: j5 i& l8 \: j .name = "user_led1",) r7 Z6 E, W* y( O6 |
.default_trigger = "default-on",6 l+ M. @7 J3 n$ G7 e
},1 ~6 `3 D, J& G3 n
{& \6 V2 N: p" E5 K7 H; M, G) t3 o
.active_low = 0,9 Q* p4 v1 i+ t' F" O9 U
.gpio = DA850_USER_LED2,5 S, v" `3 K- M
.name = "user_led2",5 K; B9 p: G K: g' w( K5 W
.default_trigger = "default-on", W% E U* O2 N. V( m
},6 n: B' W% j) c% G& c/ W, K0 [
{, o# ^. P4 ^$ ^' o, g6 s
.active_low = 0,
& @% @) a& W- X .gpio = DA850_USER_LED3,
& d0 m: E5 _* N: {( r .name = "user_led3",
- W- g& V# c( r3 J B .default_trigger = "default-on",* ~" x1 I# I! w7 o8 W3 @' t! l
},
2 c, v; c4 L* |" H! f. ]. V};
5 ]& Z6 b$ i) ^/ A `8 S5 P+ a3 D! Q- g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. m, A; g( h/ ?0 O1 Y .leds = da850_evm_tl_leds,4 ?/ I( [. u: M5 _2 }& l& M8 X/ i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; U1 L$ |( E) L3 z: [5 F: N$ ]) V};
$ X5 X6 Y/ z5 H+ S0 U% N( Y$ y
! Y3 d; \ a' H d5 |2 [static void led_dev_release(struct device *dev)# z( J- |! E8 f% v! W( U8 Y
{
4 s- a5 A# T2 B9 b- L* y5 u5 Y};
3 q0 O) E& [( q7 n, u7 H
6 g/ _8 F; @* i' \static struct platform_device da850_evm_tl_leds_device = {( U. R, y9 x% W: i' I2 y' V
.name = "leds-gpio",
# K5 U/ R, C" {; k, ~! z .id = 1,
3 h& d5 k, s; P& | U8 o7 y .dev = {
( z% {; B4 x$ T: v! v; T .platform_data = &da850_evm_tl_leds_pdata,
3 H1 t8 R# ~, o* [ .release = led_dev_release,
: K# q/ J" A5 }$ f Y }0 s- V) g# D( U/ V
};
3 m+ l. _: H$ z( @0 K1 Q! t& ^0 j! x& R
static int __init led_platform_init(void)
+ w0 ]- u3 P6 f{
0 E7 R& c: e5 z int ret;
* ?' O. F5 H% d1 R: [$ O2 @#if 0
" Q! O/ _2 r; p! j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. N8 Q3 i- f0 K) O3 j0 P
if (ret)
$ h# j& l5 T* S0 ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 a/ p5 i! u9 n: a5 C5 c K "%d\n", ret);4 d) X8 ^9 f" P% w, O/ M
#endif7 i% a5 d5 R, y" P, @- B; O9 T w
ret = platform_device_register(&da850_evm_tl_leds_device);
; Q8 }- Z5 ~6 I+ J if (ret)4 d# M4 X. X7 T" Y& N
pr_warning("Could not register som GPIO expander LEDS");
/ ` K( ^" D4 L1 ^3 {' M else+ n4 @8 N& M6 {5 t
printk(KERN_INFO "LED register sucessful!\n");! f- ?9 X* {4 O' C4 |3 p
3 R+ H( D' a2 W3 D return ret;
4 E/ L: m2 S1 _}
$ a. k( A: k) D1 A' H' r3 Q0 \
5 Z+ h$ v3 F2 h( _* Z Q% Gstatic void __exit led_platform_exit(void)
- |- P# U& j% n8 `0 J! L, z0 k# l{* t! T" o' { Q7 o! D y# ]
platform_device_unregister(&da850_evm_tl_leds_device);
, D3 A5 y# w) G$ X6 M0 p, N2 b7 e% e3 G. _
printk(KERN_INFO "LED unregister!\n");
# r# v6 H0 b" F$ q5 l" v8 X}1 A; _* P) X6 |# g7 U1 t; T
9 R! X" f, k- p" x0 Z$ J! K
module_init(led_platform_init);
# U. A1 l7 z6 M# zmodule_exit(led_platform_exit);
Q, T. P. b* L) y" N- X* d1 |8 F# G
& N q9 l% x( O/ JMODULE_DESCRIPTION("Led platform driver");
. W, ], B3 `7 ~8 |# jMODULE_AUTHOR("Tronlong");
* H6 U2 R8 m0 P. SMODULE_LICENSE("GPL");2 t \8 F% z: ~% }! g5 v% b y
' d% q" J) t# T; s0 Q9 [: c
|
|