Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
4e6fe29f
Commit
4e6fe29f
authored
Aug 30, 2017
by
Guenter Roeck
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'lee/ib-mfd-hwmon-4.14' into hwmon-next
parents
69301258
4f16cab1
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
302 additions
and
26 deletions
+302
-26
drivers/hwmon/da9052-hwmon.c
drivers/hwmon/da9052-hwmon.c
+263
-22
drivers/mfd/da9052-core.c
drivers/mfd/da9052-core.c
+23
-3
include/linux/mfd/da9052/da9052.h
include/linux/mfd/da9052/da9052.h
+6
-0
include/linux/mfd/da9052/reg.h
include/linux/mfd/da9052/reg.h
+10
-1
No files found.
drivers/hwmon/da9052-hwmon.c
View file @
4e6fe29f
...
...
@@ -20,13 +20,19 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/mfd/da9052/da9052.h>
#include <linux/mfd/da9052/reg.h>
#include <linux/regulator/consumer.h>
struct
da9052_hwmon
{
struct
da9052
*
da9052
;
struct
mutex
hwmon_lock
;
struct
da9052
*
da9052
;
struct
mutex
hwmon_lock
;
bool
tsi_as_adc
;
int
tsiref_mv
;
struct
regulator
*
tsiref
;
struct
completion
tsidone
;
};
static
const
char
*
const
input_names
[]
=
{
...
...
@@ -37,6 +43,10 @@ static const char * const input_names[] = {
[
DA9052_ADC_IN4
]
=
"ADC IN4"
,
[
DA9052_ADC_IN5
]
=
"ADC IN5"
,
[
DA9052_ADC_IN6
]
=
"ADC IN6"
,
[
DA9052_ADC_TSI_XP
]
=
"ADC TS X+"
,
[
DA9052_ADC_TSI_YP
]
=
"ADC TS Y+"
,
[
DA9052_ADC_TSI_XN
]
=
"ADC TS X-"
,
[
DA9052_ADC_TSI_YN
]
=
"ADC TS Y-"
,
[
DA9052_ADC_TJUNC
]
=
"BATTERY JUNCTION TEMP"
,
[
DA9052_ADC_VBBAT
]
=
"BACK-UP BATTERY VOLTAGE"
,
};
...
...
@@ -59,6 +69,11 @@ static inline int vbbat_reg_to_mv(int value)
return
DIV_ROUND_CLOSEST
(
value
*
5000
,
1023
);
}
static
inline
int
input_tsireg_to_mv
(
struct
da9052_hwmon
*
hwmon
,
int
value
)
{
return
DIV_ROUND_CLOSEST
(
value
*
hwmon
->
tsiref_mv
,
1023
);
}
static
inline
int
da9052_enable_vddout_channel
(
struct
da9052
*
da9052
)
{
return
da9052_reg_update
(
da9052
,
DA9052_ADC_CONT_REG
,
...
...
@@ -154,6 +169,97 @@ static ssize_t da9052_read_misc_channel(struct device *dev,
return
sprintf
(
buf
,
"%d
\n
"
,
input_reg_to_mv
(
ret
));
}
static
int
da9052_request_tsi_read
(
struct
da9052_hwmon
*
hwmon
,
int
channel
)
{
u8
val
=
DA9052_TSICONTB_TSIMAN
;
switch
(
channel
)
{
case
DA9052_ADC_TSI_XP
:
val
|=
DA9052_TSICONTB_TSIMUX_XP
;
break
;
case
DA9052_ADC_TSI_YP
:
val
|=
DA9052_TSICONTB_TSIMUX_YP
;
break
;
case
DA9052_ADC_TSI_XN
:
val
|=
DA9052_TSICONTB_TSIMUX_XN
;
break
;
case
DA9052_ADC_TSI_YN
:
val
|=
DA9052_TSICONTB_TSIMUX_YN
;
break
;
}
return
da9052_reg_write
(
hwmon
->
da9052
,
DA9052_TSI_CONT_B_REG
,
val
);
}
static
int
da9052_get_tsi_result
(
struct
da9052_hwmon
*
hwmon
,
int
channel
)
{
u8
regs
[
3
];
int
msb
,
lsb
,
err
;
/* block read to avoid separation of MSB and LSB */
err
=
da9052_group_read
(
hwmon
->
da9052
,
DA9052_TSI_X_MSB_REG
,
ARRAY_SIZE
(
regs
),
regs
);
if
(
err
)
return
err
;
switch
(
channel
)
{
case
DA9052_ADC_TSI_XP
:
case
DA9052_ADC_TSI_XN
:
msb
=
regs
[
0
]
<<
DA9052_TSILSB_TSIXL_BITS
;
lsb
=
regs
[
2
]
&
DA9052_TSILSB_TSIXL
;
lsb
>>=
DA9052_TSILSB_TSIXL_SHIFT
;
break
;
case
DA9052_ADC_TSI_YP
:
case
DA9052_ADC_TSI_YN
:
msb
=
regs
[
1
]
<<
DA9052_TSILSB_TSIYL_BITS
;
lsb
=
regs
[
2
]
&
DA9052_TSILSB_TSIYL
;
lsb
>>=
DA9052_TSILSB_TSIYL_SHIFT
;
break
;
default:
return
-
EINVAL
;
}
return
msb
|
lsb
;
}
static
ssize_t
__da9052_read_tsi
(
struct
device
*
dev
,
int
channel
)
{
struct
da9052_hwmon
*
hwmon
=
dev_get_drvdata
(
dev
);
int
ret
;
reinit_completion
(
&
hwmon
->
tsidone
);
ret
=
da9052_request_tsi_read
(
hwmon
,
channel
);
if
(
ret
<
0
)
return
ret
;
/* Wait for an conversion done interrupt */
if
(
!
wait_for_completion_timeout
(
&
hwmon
->
tsidone
,
msecs_to_jiffies
(
500
)))
return
-
ETIMEDOUT
;
return
da9052_get_tsi_result
(
hwmon
,
channel
);
}
static
ssize_t
da9052_read_tsi
(
struct
device
*
dev
,
struct
device_attribute
*
devattr
,
char
*
buf
)
{
struct
da9052_hwmon
*
hwmon
=
dev_get_drvdata
(
dev
);
int
channel
=
to_sensor_dev_attr
(
devattr
)
->
index
;
int
ret
;
mutex_lock
(
&
hwmon
->
hwmon_lock
);
ret
=
__da9052_read_tsi
(
dev
,
channel
);
mutex_unlock
(
&
hwmon
->
hwmon_lock
);
if
(
ret
<
0
)
return
ret
;
else
return
sprintf
(
buf
,
"%d
\n
"
,
input_tsireg_to_mv
(
hwmon
,
ret
));
}
static
ssize_t
da9052_read_tjunc
(
struct
device
*
dev
,
struct
device_attribute
*
devattr
,
char
*
buf
)
{
...
...
@@ -196,43 +302,82 @@ static ssize_t show_label(struct device *dev,
input_names
[
to_sensor_dev_attr
(
devattr
)
->
index
]);
}
static
SENSOR_DEVICE_ATTR
(
in0_input
,
S_IRUGO
,
da9052_read_vddout
,
NULL
,
static
umode_t
da9052_channel_is_visible
(
struct
kobject
*
kobj
,
struct
attribute
*
attr
,
int
index
)
{
struct
device
*
dev
=
container_of
(
kobj
,
struct
device
,
kobj
);
struct
da9052_hwmon
*
hwmon
=
dev_get_drvdata
(
dev
);
struct
device_attribute
*
dattr
=
container_of
(
attr
,
struct
device_attribute
,
attr
);
struct
sensor_device_attribute
*
sattr
=
to_sensor_dev_attr
(
dattr
);
if
(
!
hwmon
->
tsi_as_adc
)
{
switch
(
sattr
->
index
)
{
case
DA9052_ADC_TSI_XP
:
case
DA9052_ADC_TSI_YP
:
case
DA9052_ADC_TSI_XN
:
case
DA9052_ADC_TSI_YN
:
return
0
;
}
}
return
attr
->
mode
;
}
static
SENSOR_DEVICE_ATTR
(
in0_input
,
0444
,
da9052_read_vddout
,
NULL
,
DA9052_ADC_VDDOUT
);
static
SENSOR_DEVICE_ATTR
(
in0_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in0_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_VDDOUT
);
static
SENSOR_DEVICE_ATTR
(
in3_input
,
S_IRUGO
,
da9052_read_vbat
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in3_input
,
0444
,
da9052_read_vbat
,
NULL
,
DA9052_ADC_VBAT
);
static
SENSOR_DEVICE_ATTR
(
in3_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in3_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_VBAT
);
static
SENSOR_DEVICE_ATTR
(
in4_input
,
S_IRUGO
,
da9052_read_misc_channel
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in4_input
,
0444
,
da9052_read_misc_channel
,
NULL
,
DA9052_ADC_IN4
);
static
SENSOR_DEVICE_ATTR
(
in4_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in4_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_IN4
);
static
SENSOR_DEVICE_ATTR
(
in5_input
,
S_IRUGO
,
da9052_read_misc_channel
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in5_input
,
0444
,
da9052_read_misc_channel
,
NULL
,
DA9052_ADC_IN5
);
static
SENSOR_DEVICE_ATTR
(
in5_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in5_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_IN5
);
static
SENSOR_DEVICE_ATTR
(
in6_input
,
S_IRUGO
,
da9052_read_misc_channel
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in6_input
,
0444
,
da9052_read_misc_channel
,
NULL
,
DA9052_ADC_IN6
);
static
SENSOR_DEVICE_ATTR
(
in6_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in6_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_IN6
);
static
SENSOR_DEVICE_ATTR
(
in9_input
,
S_IRUGO
,
da9052_read_vbbat
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in9_input
,
0444
,
da9052_read_vbbat
,
NULL
,
DA9052_ADC_VBBAT
);
static
SENSOR_DEVICE_ATTR
(
in9_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in9_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_VBBAT
);
static
SENSOR_DEVICE_ATTR
(
curr1_input
,
S_IRUGO
,
da9052_read_ich
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
in70_input
,
0444
,
da9052_read_tsi
,
NULL
,
DA9052_ADC_TSI_XP
);
static
SENSOR_DEVICE_ATTR
(
in70_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TSI_XP
);
static
SENSOR_DEVICE_ATTR
(
in71_input
,
0444
,
da9052_read_tsi
,
NULL
,
DA9052_ADC_TSI_XN
);
static
SENSOR_DEVICE_ATTR
(
in71_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TSI_XN
);
static
SENSOR_DEVICE_ATTR
(
in72_input
,
0444
,
da9052_read_tsi
,
NULL
,
DA9052_ADC_TSI_YP
);
static
SENSOR_DEVICE_ATTR
(
in72_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TSI_YP
);
static
SENSOR_DEVICE_ATTR
(
in73_input
,
0444
,
da9052_read_tsi
,
NULL
,
DA9052_ADC_TSI_YN
);
static
SENSOR_DEVICE_ATTR
(
in73_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TSI_YN
);
static
SENSOR_DEVICE_ATTR
(
curr1_input
,
0444
,
da9052_read_ich
,
NULL
,
DA9052_ADC_ICH
);
static
SENSOR_DEVICE_ATTR
(
curr1_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
curr1_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_ICH
);
static
SENSOR_DEVICE_ATTR
(
temp2_input
,
S_IRUGO
,
da9052_read_tbat
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
temp2_input
,
0444
,
da9052_read_tbat
,
NULL
,
DA9052_ADC_TBAT
);
static
SENSOR_DEVICE_ATTR
(
temp2_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
temp2_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TBAT
);
static
SENSOR_DEVICE_ATTR
(
temp8_input
,
S_IRUGO
,
da9052_read_tjunc
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
temp8_input
,
0444
,
da9052_read_tjunc
,
NULL
,
DA9052_ADC_TJUNC
);
static
SENSOR_DEVICE_ATTR
(
temp8_label
,
S_IRUGO
,
show_label
,
NULL
,
static
SENSOR_DEVICE_ATTR
(
temp8_label
,
0444
,
show_label
,
NULL
,
DA9052_ADC_TJUNC
);
static
struct
attribute
*
da9052_attrs
[]
=
{
...
...
@@ -246,6 +391,14 @@ static struct attribute *da9052_attrs[] = {
&
sensor_dev_attr_in5_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in6_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in6_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in70_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in70_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in71_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in71_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in72_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in72_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in73_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in73_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_in9_input
.
dev_attr
.
attr
,
&
sensor_dev_attr_in9_label
.
dev_attr
.
attr
,
&
sensor_dev_attr_curr1_input
.
dev_attr
.
attr
,
...
...
@@ -257,29 +410,117 @@ static struct attribute *da9052_attrs[] = {
NULL
};
ATTRIBUTE_GROUPS
(
da9052
);
static
const
struct
attribute_group
da9052_group
=
{
.
attrs
=
da9052_attrs
,
.
is_visible
=
da9052_channel_is_visible
,
};
__ATTRIBUTE_GROUPS
(
da9052
);
static
irqreturn_t
da9052_tsi_datardy_irq
(
int
irq
,
void
*
data
)
{
struct
da9052_hwmon
*
hwmon
=
data
;
complete
(
&
hwmon
->
tsidone
);
return
IRQ_HANDLED
;
}
static
int
da9052_hwmon_probe
(
struct
platform_device
*
pdev
)
{
struct
device
*
dev
=
&
pdev
->
dev
;
struct
da9052_hwmon
*
hwmon
;
struct
device
*
hwmon_dev
;
int
err
;
hwmon
=
devm_kzalloc
(
dev
,
sizeof
(
struct
da9052_hwmon
),
GFP_KERNEL
);
if
(
!
hwmon
)
return
-
ENOMEM
;
platform_set_drvdata
(
pdev
,
hwmon
);
mutex_init
(
&
hwmon
->
hwmon_lock
);
hwmon
->
da9052
=
dev_get_drvdata
(
pdev
->
dev
.
parent
);
init_completion
(
&
hwmon
->
tsidone
);
hwmon
->
tsi_as_adc
=
device_property_read_bool
(
pdev
->
dev
.
parent
,
"dlg,tsi-as-adc"
);
if
(
hwmon
->
tsi_as_adc
)
{
hwmon
->
tsiref
=
devm_regulator_get
(
pdev
->
dev
.
parent
,
"tsiref"
);
if
(
IS_ERR
(
hwmon
->
tsiref
))
{
err
=
PTR_ERR
(
hwmon
->
tsiref
);
dev_err
(
&
pdev
->
dev
,
"failed to get tsiref: %d"
,
err
);
return
err
;
}
err
=
regulator_enable
(
hwmon
->
tsiref
);
if
(
err
)
return
err
;
hwmon
->
tsiref_mv
=
regulator_get_voltage
(
hwmon
->
tsiref
);
if
(
hwmon
->
tsiref_mv
<
0
)
{
err
=
hwmon
->
tsiref_mv
;
goto
exit_regulator
;
}
/* convert from microvolt (DT) to millivolt (hwmon) */
hwmon
->
tsiref_mv
/=
1000
;
/* TSIREF limits from datasheet */
if
(
hwmon
->
tsiref_mv
<
1800
||
hwmon
->
tsiref_mv
>
2600
)
{
dev_err
(
hwmon
->
da9052
->
dev
,
"invalid TSIREF voltage: %d"
,
hwmon
->
tsiref_mv
);
err
=
-
ENXIO
;
goto
exit_regulator
;
}
/* disable touchscreen features */
da9052_reg_write
(
hwmon
->
da9052
,
DA9052_TSI_CONT_A_REG
,
0x00
);
err
=
da9052_request_irq
(
hwmon
->
da9052
,
DA9052_IRQ_TSIREADY
,
"tsiready-irq"
,
da9052_tsi_datardy_irq
,
hwmon
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to register TSIRDY IRQ: %d"
,
err
);
goto
exit_regulator
;
}
}
hwmon_dev
=
devm_hwmon_device_register_with_groups
(
dev
,
"da9052"
,
hwmon
,
da9052_groups
);
return
PTR_ERR_OR_ZERO
(
hwmon_dev
);
err
=
PTR_ERR_OR_ZERO
(
hwmon_dev
);
if
(
err
)
goto
exit_irq
;
return
0
;
exit_irq:
if
(
hwmon
->
tsi_as_adc
)
da9052_free_irq
(
hwmon
->
da9052
,
DA9052_IRQ_TSIREADY
,
hwmon
);
exit_regulator:
if
(
hwmon
->
tsiref
)
regulator_disable
(
hwmon
->
tsiref
);
return
err
;
}
static
int
da9052_hwmon_remove
(
struct
platform_device
*
pdev
)
{
struct
da9052_hwmon
*
hwmon
=
platform_get_drvdata
(
pdev
);
if
(
hwmon
->
tsi_as_adc
)
{
da9052_free_irq
(
hwmon
->
da9052
,
DA9052_IRQ_TSIREADY
,
hwmon
);
regulator_disable
(
hwmon
->
tsiref
);
}
return
0
;
}
static
struct
platform_driver
da9052_hwmon_driver
=
{
.
probe
=
da9052_hwmon_probe
,
.
remove
=
da9052_hwmon_remove
,
.
driver
=
{
.
name
=
"da9052-hwmon"
,
},
...
...
drivers/mfd/da9052-core.c
View file @
4e6fe29f
...
...
@@ -18,6 +18,7 @@
#include <linux/mfd/core.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/property.h>
#include <linux/mfd/da9052/da9052.h>
#include <linux/mfd/da9052/pdata.h>
...
...
@@ -518,9 +519,6 @@ static const struct mfd_cell da9052_subdev_info[] = {
{
.
name
=
"da9052-wled3"
,
},
{
.
name
=
"da9052-tsi"
,
},
{
.
name
=
"da9052-bat"
,
},
...
...
@@ -529,6 +527,10 @@ static const struct mfd_cell da9052_subdev_info[] = {
},
};
static
const
struct
mfd_cell
da9052_tsi_subdev_info
[]
=
{
{
.
name
=
"da9052-tsi"
},
};
const
struct
regmap_config
da9052_regmap_config
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
...
...
@@ -619,9 +621,27 @@ int da9052_device_init(struct da9052 *da9052, u8 chip_id)
goto
err
;
}
/*
* Check if touchscreen pins are used are analogue input instead
* of having a touchscreen connected to them. The analogue input
* functionality will be provided by hwmon driver (if enabled).
*/
if
(
!
device_property_read_bool
(
da9052
->
dev
,
"dlg,tsi-as-adc"
))
{
ret
=
mfd_add_devices
(
da9052
->
dev
,
PLATFORM_DEVID_AUTO
,
da9052_tsi_subdev_info
,
ARRAY_SIZE
(
da9052_tsi_subdev_info
),
NULL
,
0
,
NULL
);
if
(
ret
)
{
dev_err
(
da9052
->
dev
,
"failed to add TSI subdev: %d
\n
"
,
ret
);
goto
err
;
}
}
return
0
;
err:
mfd_remove_devices
(
da9052
->
dev
);
da9052_irq_exit
(
da9052
);
return
ret
;
...
...
include/linux/mfd/da9052/da9052.h
View file @
4e6fe29f
...
...
@@ -45,6 +45,12 @@
#define DA9052_ADC_TJUNC 8
#define DA9052_ADC_VBBAT 9
/* TSI channel has its own 4 channel mux */
#define DA9052_ADC_TSI_XP 70
#define DA9052_ADC_TSI_XN 71
#define DA9052_ADC_TSI_YP 72
#define DA9052_ADC_TSI_YN 73
#define DA9052_IRQ_DCIN 0
#define DA9052_IRQ_VBUS 1
#define DA9052_IRQ_DCINREM 2
...
...
include/linux/mfd/da9052/reg.h
View file @
4e6fe29f
...
...
@@ -690,7 +690,10 @@
/* TSI CONTROL REGISTER B BITS */
#define DA9052_TSICONTB_ADCREF 0X80
#define DA9052_TSICONTB_TSIMAN 0X40
#define DA9052_TSICONTB_TSIMUX 0X30
#define DA9052_TSICONTB_TSIMUX_XP 0X00
#define DA9052_TSICONTB_TSIMUX_YP 0X10
#define DA9052_TSICONTB_TSIMUX_XN 0X20
#define DA9052_TSICONTB_TSIMUX_YN 0X30
#define DA9052_TSICONTB_TSISEL3 0X08
#define DA9052_TSICONTB_TSISEL2 0X04
#define DA9052_TSICONTB_TSISEL1 0X02
...
...
@@ -705,8 +708,14 @@
/* TSI CO-ORDINATE LSB RESULT REGISTER BITS */
#define DA9052_TSILSB_PENDOWN 0X40
#define DA9052_TSILSB_TSIZL 0X30
#define DA9052_TSILSB_TSIZL_SHIFT 4
#define DA9052_TSILSB_TSIZL_BITS 2
#define DA9052_TSILSB_TSIYL 0X0C
#define DA9052_TSILSB_TSIYL_SHIFT 2
#define DA9052_TSILSB_TSIYL_BITS 2
#define DA9052_TSILSB_TSIXL 0X03
#define DA9052_TSILSB_TSIXL_SHIFT 0
#define DA9052_TSILSB_TSIXL_BITS 2
/* TSI Z MEASUREMENT MSB RESULT REGISTER BIT */
#define DA9052_TSIZMSB_TSIZM 0XFF
...
...
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