Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC TDC 1ns 5cha - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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 - Software
Commits
411f5fd7
Commit
411f5fd7
authored
Aug 30, 2012
by
Miguel Gómez Sexto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tdc: Added new ZIO attributes and connected to tdc functions.
Signed-off-by:
Miguel Gómez
<
magomez@igalia.com
>
parent
4065bafd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
77 additions
and
59 deletions
+77
-59
tdc-core.c
tdc-core.c
+7
-2
tdc-zio.c
tdc-zio.c
+60
-48
tdc.h
tdc.h
+10
-9
No files found.
tdc-core.c
View file @
411f5fd7
...
...
@@ -65,19 +65,24 @@ void tdc_set_dac_word(struct spec_tdc *tdc, u32 val)
writel
(
TDC_CTRL_CONFIG_DAC
,
tdc
->
base
+
TDC_CTRL_REG
);
}
u32
tdc_get_dac_word
(
struct
spec_tdc
*
tdc
)
{
return
readl
(
tdc
->
base
+
TDC_DAC_WORD_R
);
}
void
tdc_clear_da_capo_flag
(
struct
spec_tdc
*
tdc
)
{
writel
(
TDC_CTRL_CLEAR_DACAPO_FLAG
,
tdc
->
base
+
TDC_CTRL_REG
);
}
void
tdc_activate_a
d
quisition
(
struct
spec_tdc
*
tdc
)
void
tdc_activate_a
c
quisition
(
struct
spec_tdc
*
tdc
)
{
/* Before activate the adquisition is required to reset the ACAM chip */
tdc_acam_reset
(
tdc
);
writel
(
TDC_CTRL_EN_ACQ
,
tdc
->
base
+
TDC_CTRL_REG
);
}
void
tdc_deactivate_a
d
quisition
(
struct
spec_tdc
*
tdc
)
void
tdc_deactivate_a
c
quisition
(
struct
spec_tdc
*
tdc
)
{
writel
(
TDC_CTRL_DIS_ACQ
,
tdc
->
base
+
TDC_CTRL_REG
);
}
...
...
tdc-zio.c
View file @
411f5fd7
...
...
@@ -31,20 +31,17 @@ DEFINE_ZATTR_STD(ZDEV, tdc_zattr_dev_std) = {
static
struct
zio_attribute
tdc_zattr_dev
[]
=
{
ZATTR_EXT_REG
(
"version"
,
S_IRUGO
,
TDC_ATTR_DEV_VERSION
,
TDC_VERSION
),
ZATTR_EXT_REG
(
"tstamp
s-thresh"
,
_RW_
,
TDC_ATTR_DEV_TSTAMPS
_THRESH
,
100
),
ZATTR_EXT_REG
(
"tstamp
-thresh"
,
_RW_
,
TDC_ATTR_DEV_TSTAMP
_THRESH
,
100
),
ZATTR_EXT_REG
(
"time-thresh"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
ZATTR_EXT_REG
(
"current_utc_time"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
ZATTR_EXT_REG
(
"set_utc_time"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
ZATTR_EXT_REG
(
"input_enable"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
/* XXX: Needed ?? */
ZATTR_EXT_REG
(
"dac_word"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
ZATTR_EXT_REG
(
"activate_adquisition"
,
_RW_
,
TDC_ATTR_DEV_TIME_THRESH
,
100
),
ZATTR_EXT_REG
(
"current_utc_time"
,
S_IRUGO
,
TDC_ATTR_DEV_CURRENT_UTC
,
0
),
ZATTR_EXT_REG
(
"set_utc_time"
,
S_IWUGO
,
TDC_ATTR_DEV_SET_UTC
,
0
),
ZATTR_EXT_REG
(
"input_enable"
,
_RW_
,
TDC_ATTR_DEV_INPUT_ENABLED
,
0x1F
),
ZATTR_EXT_REG
(
"dac_word"
,
_RW_
,
TDC_ATTR_DEV_DAC_WORD
,
0
),
ZATTR_EXT_REG
(
"activate_acquisition"
,
_RW_
,
TDC_ATTR_DEV_ACTIVATE_ACQUISITION
,
0
),
};
static
struct
zio_attribute
tdc_zattr_cset
[]
=
{
ZATTR_EXT_REG
(
"enabled"
,
_RW_
,
TDC_ATTR_CHAN_ENABLED
,
1
),
};
static
struct
zio_cset
tdc_cset
[]
=
{
{
SET_OBJECT_NAME
(
"tdc-cset0"
),
...
...
@@ -53,8 +50,8 @@ static struct zio_cset tdc_cset[] = {
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
tdc_zattr_cset
,
.
n_ext_attr
=
ARRAY_SIZE
(
tdc_zattr_cset
)
,
.
ext_zattr
=
NULL
,
.
n_ext_attr
=
0
,
},
},
{
...
...
@@ -64,8 +61,8 @@ static struct zio_cset tdc_cset[] = {
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
tdc_zattr_cset
,
.
n_ext_attr
=
ARRAY_SIZE
(
tdc_zattr_cset
)
,
.
ext_zattr
=
NULL
,
.
n_ext_attr
=
0
,
},
},
{
...
...
@@ -75,8 +72,8 @@ static struct zio_cset tdc_cset[] = {
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
tdc_zattr_cset
,
.
n_ext_attr
=
ARRAY_SIZE
(
tdc_zattr_cset
)
,
.
ext_zattr
=
NULL
,
.
n_ext_attr
=
0
,
},
},
{
...
...
@@ -86,8 +83,8 @@ static struct zio_cset tdc_cset[] = {
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
tdc_zattr_cset
,
.
n_ext_attr
=
ARRAY_SIZE
(
tdc_zattr_cset
)
,
.
ext_zattr
=
NULL
,
.
n_ext_attr
=
0
,
},
},
{
...
...
@@ -97,39 +94,50 @@ static struct zio_cset tdc_cset[] = {
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
tdc_zattr_cset
,
.
n_ext_attr
=
ARRAY_SIZE
(
tdc_zattr_cset
)
,
.
ext_zattr
=
NULL
,
.
n_ext_attr
=
0
,
},
},
};
static
int
tdc_zio_conf_set
(
struct
device
*
dev
,
struct
zio_attribute
*
zattr
,
uint32_t
usr_val
)
uint32_t
usr_val
)
{
struct
zio_device
*
zdev
;
struct
zio_cset
*
cset
;
struct
zio_attribute
*
attr
;
int
chan
;
struct
spec_tdc
*
tdc
;
cset
=
to_zio_cset
(
dev
);
chan
=
cset
->
index
-
1
;
zdev
=
to_zio_dev
(
dev
);
attr
=
zdev
->
zattr_set
.
ext_zattr
;
tdc
=
zdev
->
priv_d
;
switch
(
zattr
->
priv
.
addr
)
{
case
TDC_ATTR_DEV_TSTAMPS_THRESH
:
/* TODO: set value in the device */
pr_err
(
"New value for timestamps threshold: %i
\n
"
,
usr_val
);
case
TDC_ATTR_DEV_TSTAMP_THRESH
:
tdc_set_irq_tstamp_thresh
(
tdc
,
usr_val
);
break
;
case
TDC_ATTR_DEV_TIME_THRESH
:
/* TODO: set value in the device */
pr_err
(
"New value for time threshold: %i
\n
"
,
usr_val
);
tdc_set_irq_time_thresh
(
tdc
,
usr_val
);
break
;
case
TDC_ATTR_DEV_CURRENT_UTC
:
break
;
case
TDC_ATTR_DEV_SET_UTC
:
tdc_set_utc_time
(
tdc
);
break
;
case
TDC_ATTR_DEV_INPUT_ENABLED
:
tdc_set_input_enable
(
tdc
,
usr_val
);
break
;
case
TDC_ATTR_CHAN_ENABLED
:
/* TODO: set value in the device */
pr_err
(
"New value for enabled in channel %i: %i
\n
"
,
chan
,
usr_val
);
case
TDC_ATTR_DEV_DAC_WORD
:
tdc_set_dac_word
(
tdc
,
usr_val
);
break
;
case
TDC_ATTR_DEV_ACTIVATE_ACQUISITION
:
if
(
usr_val
)
{
atomic_set
(
&
tdc
->
busy
,
1
);
tdc_activate_acquisition
(
tdc
);
}
else
{
atomic_set
(
&
tdc
->
busy
,
0
);
tdc_deactivate_acquisition
(
tdc
);
}
break
;
default:
return
-
EINVAL
;
...
...
@@ -143,29 +151,33 @@ static int tdc_zio_info_get(struct device *dev,
uint32_t
*
usr_val
)
{
struct
zio_device
*
zdev
;
struct
zio_cset
*
cset
;
struct
zio_attribute
*
attr
;
struct
spec_tdc
*
tdc
;
cset
=
to_zio_cset
(
dev
);
zdev
=
to_zio_dev
(
dev
);
attr
=
zdev
->
zattr_set
.
ext_zattr
;
tdc
=
zdev
->
priv_d
;
switch
(
zattr
->
priv
.
addr
)
{
case
TDC_ATTR_DEV_TSTAMPS_THRESH
:
/* TODO: get value from device */
pr_err
(
"Value for timestamps threshold: %i
\n
"
,
100
);
*
usr_val
=
100
;
case
TDC_ATTR_DEV_TSTAMP_THRESH
:
*
usr_val
=
tdc_get_irq_tstamp_thresh
(
tdc
);
break
;
case
TDC_ATTR_DEV_TIME_THRESH
:
/* TODO: get value from device */
pr_err
(
"Value for time threshold: %i
\n
"
,
100
);
*
usr_val
=
100
;
*
usr_val
=
tdc_get_irq_time_thresh
(
tdc
);
break
;
case
TDC_ATTR_DEV_CURRENT_UTC
:
*
usr_val
=
tdc_get_current_utc_time
(
tdc
);
break
;
case
TDC_ATTR_DEV_SET_UTC
:
break
;
case
TDC_ATTR_DEV_INPUT_ENABLED
:
*
usr_val
=
tdc_get_input_enable
(
tdc
);
break
;
case
TDC_ATTR_DEV_DAC_WORD
:
*
usr_val
=
tdc_get_dac_word
(
tdc
);
break
;
case
TDC_ATTR_CHAN_ENABLED
:
/* TODO: get value from device */
*
usr_val
=
1
;
pr_err
(
"Value for enabled in channel %i: %i
\n
"
,
cset
->
index
,
1
);
case
TDC_ATTR_DEV_ACTIVATE_ACQUISITION
:
*
usr_val
=
atomic_read
(
&
tdc
->
busy
);
break
;
default:
return
-
EINVAL
;
...
...
tdc.h
View file @
411f5fd7
...
...
@@ -14,6 +14,7 @@ struct spec_tdc {
unsigned
char
__iomem
*
regs
;
unsigned
char
__iomem
*
gn412x_regs
;
struct
work_struct
irq_work
;
atomic_t
busy
;
/* whether the device is acquiring data */
u32
wr_pointer
;
/* XXX: Used to save the previous value of the wr_pointer
* XXX: Watch out the Da Capo Flag! It may confuse us!
*/
...
...
@@ -36,17 +37,16 @@ struct tdc_acam_cfg {
/* Device-wide ZIO attributes */
enum
tdc_zattr_dev_idx
{
TDC_ATTR_DEV_VERSION
=
0
,
TDC_ATTR_DEV_TSTAMP
S
_THRESH
,
TDC_ATTR_DEV_TSTAMP_THRESH
,
TDC_ATTR_DEV_TIME_THRESH
,
TDC_ATTR_DEV_CURRENT_UTC
,
TDC_ATTR_DEV_SET_UTC
,
TDC_ATTR_DEV_INPUT_ENABLED
,
TDC_ATTR_DEV_DAC_WORD
,
TDC_ATTR_DEV_ACTIVATE_ACQUISITION
,
TDC_ATTR_DEV__LAST
,
};
/* Channel ZIO attributes */
enum
tdc_zattr_chan_idx
{
TDC_ATTR_CHAN_ENABLED
=
TDC_ATTR_DEV__LAST
,
TDC_ATTR_CHAN__LAST
,
};
/* ZIO helper functions */
extern
int
tdc_zio_register_device
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_zio_remove
(
struct
spec_tdc
*
tdc
);
...
...
@@ -87,9 +87,10 @@ extern u32 tdc_get_irq_tstamp_thresh(struct spec_tdc *tdc);
extern
u32
tdc_get_irq_time_thresh
(
struct
spec_tdc
*
tdc
);
extern
u32
tdc_get_current_utc_time
(
struct
spec_tdc
*
tdc
);
extern
u32
tdc_get_circular_buffer_wr_pointer
(
struct
spec_tdc
*
tdc
);
extern
u32
tdc_get_dac_word
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_clear_da_capo_flag
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_activate_a
d
quisition
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_deactivate_a
d
quisition
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_activate_a
c
quisition
(
struct
spec_tdc
*
tdc
);
extern
void
tdc_deactivate_a
c
quisition
(
struct
spec_tdc
*
tdc
);
#endif
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