Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC TDC 1ns 5cha
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
FMC TDC 1ns 5cha
Commits
1fba8b50
Commit
1fba8b50
authored
Sep 10, 2012
by
Samuel Iglesias Gonsálvez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tdc: merge from siglesias-devel
parent
05ddc0e4
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
38 deletions
+14
-38
tdc-acam.c
drivers/tdc-acam.c
+4
-17
tdc-core.c
drivers/tdc-core.c
+1
-1
tdc-fmc.c
drivers/tdc-fmc.c
+9
-20
No files found.
drivers/tdc-acam.c
View file @
1fba8b50
...
...
@@ -13,6 +13,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <asm/io.h>
#include "tdc.h"
...
...
@@ -69,6 +70,7 @@ int tdc_acam_load_config(struct spec_tdc *tdc, struct tdc_acam_cfg *cfg)
writel
(
cfg
->
edge_config
,
tdc
->
base
+
TDC_ACAM_CFG_REG_0
);
writel
(
cfg
->
channel_adj
,
tdc
->
base
+
TDC_ACAM_CFG_REG_1
);
writel
(
cfg
->
mode_enable
,
tdc
->
base
+
TDC_ACAM_CFG_REG_2
);
mdelay
(
1000
);
writel
(
cfg
->
resolution
,
tdc
->
base
+
TDC_ACAM_CFG_REG_3
);
writel
(
cfg
->
start_timer_set
,
tdc
->
base
+
TDC_ACAM_CFG_REG_4
);
writel
(
cfg
->
start_retrigger
,
tdc
->
base
+
TDC_ACAM_CFG_REG_5
);
...
...
@@ -80,6 +82,7 @@ int tdc_acam_load_config(struct spec_tdc *tdc, struct tdc_acam_cfg *cfg)
/* Send the load command to the firmware */
__tdc_acam_do_load_config
(
tdc
);
mdelay
(
1000
);
return
0
;
}
...
...
@@ -107,8 +110,6 @@ int tdc_acam_get_config(struct spec_tdc *tdc, struct tdc_acam_cfg *cfg)
int
tdc_acam_set_default_config
(
struct
spec_tdc
*
tdc
)
{
struct
tdc_acam_cfg
cfg
;
struct
tdc_acam_cfg
tmp
;
int
ret
;
/* Default setup as indicated in the datasheet */
cfg
.
edge_config
=
0x01F0FC81
;
...
...
@@ -123,19 +124,5 @@ int tdc_acam_set_default_config(struct spec_tdc *tdc)
cfg
.
int_flag_cfg
=
0x04000000
;
cfg
.
ctrl_16_bit_mode
=
0x0
;
ret
=
tdc_acam_load_config
(
tdc
,
&
cfg
);
tdc_acam_get_config
(
tdc
,
&
tmp
);
pr_err
(
"tdc: cfg.edge_config = 0x%x/0x%x
\n
"
,
tmp
.
edge_config
,
cfg
.
edge_config
);
pr_err
(
"tdc: cfg.channel_adj = 0x%x/0x%x
\n
"
,
tmp
.
channel_adj
,
cfg
.
channel_adj
);
pr_err
(
"tdc: cfg.mode_enable = 0x%x/0x%x
\n
"
,
tmp
.
mode_enable
,
cfg
.
mode_enable
);
pr_err
(
"tdc: cfg.resolution = 0x%x/0x%x
\n
"
,
tmp
.
resolution
,
cfg
.
resolution
);
pr_err
(
"tdc: cfg.start_timer_set = 0x%x/0x%x
\n
"
,
tmp
.
start_timer_set
,
cfg
.
start_timer_set
);
pr_err
(
"tdc: cfg.start_retrigger = 0x%x/0x%x
\n
"
,
tmp
.
start_retrigger
,
cfg
.
start_retrigger
);
pr_err
(
"tdc: cfg.lf_flags_level = 0x%x/0x%x
\n
"
,
tmp
.
lf_flags_level
,
cfg
.
lf_flags_level
);
pr_err
(
"tdc: cfg.pll = 0x%x/0x%x
\n
"
,
tmp
.
pll
,
cfg
.
pll
);
pr_err
(
"tdc: cfg.err_flag_cfg = 0x%x/0x%x
\n
"
,
tmp
.
err_flag_cfg
,
cfg
.
err_flag_cfg
);
pr_err
(
"tdc: cfg.int_flag_cfg = 0x%x/0x%x
\n
"
,
tmp
.
int_flag_cfg
,
cfg
.
int_flag_cfg
);
pr_err
(
"tdc: cfg.ctrl_16_bit_mode = 0x%x/0x%x
\n
"
,
tmp
.
ctrl_16_bit_mode
,
cfg
.
ctrl_16_bit_mode
);
return
ret
;
return
tdc_acam_load_config
(
tdc
,
&
cfg
);
}
drivers/tdc-core.c
View file @
1fba8b50
...
...
@@ -137,4 +137,4 @@ static void tdc_exit(void)
module_init
(
tdc_init
);
module_exit
(
tdc_exit
);
MODULE_LICENSE
(
"GPL"
);
/* FIXME? Fine delay driver has LGPL (GPL and additional rights) */
MODULE_LICENSE
(
"GPL"
);
drivers/tdc-fmc.c
View file @
1fba8b50
...
...
@@ -37,8 +37,7 @@ static void tdc_fmc_gennum_setup_local_clock(struct spec_tdc *tdc, int freq)
/* Setup local clock */
divot
=
800
/
freq
-
1
;
data
=
0xE001F00C
+
(
divot
<<
4
);
/* FIXME: Now setup for 160 MHz directly. */
writel
(
0x0001F04C
,
tdc
->
gn412x_regs
+
TDC_PCI_CLK_CSR
);
writel
(
data
,
tdc
->
gn412x_regs
+
TDC_PCI_CLK_CSR
);
}
static
void
tdc_fmc_fw_reset
(
struct
spec_tdc
*
tdc
)
...
...
@@ -187,6 +186,7 @@ irqreturn_t tdc_fmc_irq_handler(int irq, void *dev_id)
wake_up
(
&
fmc_wait_dma
);
}
/* Acknowledge the IRQ and exit */
writel
(
irq_code
,
fmc
->
base
+
TDC_IRQ_STATUS_REG
);
fmc
->
op
->
irq_ack
(
fmc
);
return
IRQ_HANDLED
;
}
...
...
@@ -222,15 +222,6 @@ int tdc_fmc_probe(struct fmc_device *dev)
tdc
->
gn412x_regs
=
spec
->
remap
[
2
];
/* BAR 4 */
tdc
->
wr_pointer
=
0
;
/* XXX: Not implemented yet. Do we needed it? */
#if 0
/* Check if the device is DMA capable on 32 bits. */
if (pci_set_dma_mask(spec->pdev, DMA_BIT_MASK(64)) < 0) {
pr_err("error setting 64-bit DMA mask.\n");
kfree(tdc);
return -ENXIO;
}
#endif
for
(
i
=
0
;
i
<
TDC_CHAN_NUMBER
;
i
++
)
sema_init
(
&
tdc
->
event
[
i
].
lock
,
0
);
/* Setup the Gennum 412x local clock frequency */
...
...
@@ -246,17 +237,19 @@ int tdc_fmc_probe(struct fmc_device *dev)
/* Initialize DAC */
tdc_set_dac_word
(
tdc
,
0xA8F5
);
/* Initialize timestamp threshold */
tdc_set_irq_tstamp_thresh
(
tdc
,
255
);
tdc_set_irq_tstamp_thresh
(
tdc
,
0x100
);
/* Initialize time threshold */
tdc_set_irq_time_thresh
(
tdc
,
256
);
tdc_set_irq_time_thresh
(
tdc
,
0x10
);
/* Prepare the irq work */
INIT_WORK
(
&
tdc
->
irq_work
,
tdc_fmc_irq_work
);
/* Clear IRQ */
writel
(
0xF
,
tdc
->
base
+
TDC_IRQ_STATUS_REG
);
/* Request the IRQ */
dev
->
op
->
irq_request
(
dev
,
tdc_fmc_irq_handler
,
"spec-tdc"
,
IRQF_SHARED
);
/* Enable IRQ */
writel
(
0xC
,
tdc
->
base
+
TDC_IRQ_ENABLE_REG
);
/* FIXME: define constant 0xC */
writel
(
0xC
,
tdc
->
base
+
TDC_IRQ_ENABLE_REG
);
return
tdc_zio_register_device
(
tdc
);
}
...
...
@@ -266,8 +259,6 @@ int tdc_fmc_remove(struct fmc_device *dev)
struct
spec_tdc
*
tdc
=
spec
->
sub_priv
;
cancel_work_sync
(
&
tdc
->
irq_work
);
/* XXX: It gives a kernel oops if I enabled it. Check it out */
//flush_workqueue(tdc_workqueue);
tdc
->
fmc
->
op
->
irq_free
(
tdc
->
fmc
);
tdc_zio_remove
(
tdc
);
kfree
(
tdc
);
...
...
@@ -290,5 +281,3 @@ void tdc_fmc_exit(void)
destroy_workqueue
(
tdc_workqueue
);
fmc_driver_unregister
(
&
tdc_fmc_driver
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment