mirror of https://github.com/torvalds/linux.git
Char/Misc driver fixes for 6.6-rc6
Here is a small set of char/misc and other smaller driver subsystem fixes for 6.6-rc6. Included in here are: - lots of iio driver fixes - binder memory leak fix - mcb driver fixes - counter driver fixes - firmware loader documentation fix - embargoed hardware issue documentation update All of these have been in linux-next for over a week with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZSwDDg8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ym+dACeMHpZCh9sxF78uhfIrth6et899uYAoNBoiAOA pTDip38HytOnQ/FpTEzh =AuVV -----END PGP SIGNATURE----- Merge tag 'char-misc-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc Pull char/misc driver fixes from Greg KH: "Here is a small set of char/misc and other smaller driver subsystem fixes for 6.6-rc6. Included in here are: - lots of iio driver fixes - binder memory leak fix - mcb driver fixes - counter driver fixes - firmware loader documentation fix - documentation update for embargoed hardware issues All of these have been in linux-next for over a week with no reported issues" * tag 'char-misc-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (22 commits) iio: pressure: ms5611: ms5611_prom_is_valid false negative bug dt-bindings: iio: adc: adi,ad7292: Fix additionalProperties on channel nodes iio: adc: ad7192: Correct reference voltage iio: light: vcnl4000: Don't power on/off chip in config iio: addac: Kconfig: update ad74413r selections iio: pressure: dps310: Adjust Timeout Settings iio: imu: bno055: Fix missing Kconfig dependencies iio: adc: imx8qxp: Fix address for command buffer registers iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data() iio: irsd200: fix -Warray-bounds bug in irsd200_trigger_handler dt-bindings: iio: rohm,bu27010: add missing vdd-supply to example binder: fix memory leaks of spam and pending work firmware_loader: Update contact emails for ABI docs Documentation: embargoed-hardware-issues.rst: Clarify prenotifaction mcb: remove is_added flag from mcb_device struct coresight: tmc-etr: Disable warnings for allocation failures coresight: Fix run time warnings while reusing ETR buffer iio: admv1013: add mixer_vgate corner cases iio: pressure: bmp280: Fix NULL pointer exception iio: dac: ad3552r: Correct device IDs ...
This commit is contained in:
commit
a477e3a76b
|
|
@ -1,7 +1,7 @@
|
||||||
What: /sys/class/firmware/.../data
|
What: /sys/class/firmware/.../data
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: The data sysfs file is used for firmware-fallback and for
|
Description: The data sysfs file is used for firmware-fallback and for
|
||||||
firmware uploads. Cat a firmware image to this sysfs file
|
firmware uploads. Cat a firmware image to this sysfs file
|
||||||
after you echo 1 to the loading sysfs file. When the firmware
|
after you echo 1 to the loading sysfs file. When the firmware
|
||||||
|
|
@ -13,7 +13,7 @@ Description: The data sysfs file is used for firmware-fallback and for
|
||||||
What: /sys/class/firmware/.../cancel
|
What: /sys/class/firmware/.../cancel
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: Write-only. For firmware uploads, write a "1" to this file to
|
Description: Write-only. For firmware uploads, write a "1" to this file to
|
||||||
request that the transfer of firmware data to the lower-level
|
request that the transfer of firmware data to the lower-level
|
||||||
device be canceled. This request will be rejected (EBUSY) if
|
device be canceled. This request will be rejected (EBUSY) if
|
||||||
|
|
@ -23,7 +23,7 @@ Description: Write-only. For firmware uploads, write a "1" to this file to
|
||||||
What: /sys/class/firmware/.../error
|
What: /sys/class/firmware/.../error
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: Read-only. Returns a string describing a failed firmware
|
Description: Read-only. Returns a string describing a failed firmware
|
||||||
upload. This string will be in the form of <STATUS>:<ERROR>,
|
upload. This string will be in the form of <STATUS>:<ERROR>,
|
||||||
where <STATUS> will be one of the status strings described
|
where <STATUS> will be one of the status strings described
|
||||||
|
|
@ -37,7 +37,7 @@ Description: Read-only. Returns a string describing a failed firmware
|
||||||
What: /sys/class/firmware/.../loading
|
What: /sys/class/firmware/.../loading
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: The loading sysfs file is used for both firmware-fallback and
|
Description: The loading sysfs file is used for both firmware-fallback and
|
||||||
for firmware uploads. Echo 1 onto the loading file to indicate
|
for firmware uploads. Echo 1 onto the loading file to indicate
|
||||||
you are writing a firmware file to the data sysfs node. Echo
|
you are writing a firmware file to the data sysfs node. Echo
|
||||||
|
|
@ -49,7 +49,7 @@ Description: The loading sysfs file is used for both firmware-fallback and
|
||||||
What: /sys/class/firmware/.../remaining_size
|
What: /sys/class/firmware/.../remaining_size
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: Read-only. For firmware upload, this file contains the size
|
Description: Read-only. For firmware upload, this file contains the size
|
||||||
of the firmware data that remains to be transferred to the
|
of the firmware data that remains to be transferred to the
|
||||||
lower-level device driver. The size value is initialized to
|
lower-level device driver. The size value is initialized to
|
||||||
|
|
@ -62,7 +62,7 @@ Description: Read-only. For firmware upload, this file contains the size
|
||||||
What: /sys/class/firmware/.../status
|
What: /sys/class/firmware/.../status
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: Read-only. Returns a string describing the current status of
|
Description: Read-only. Returns a string describing the current status of
|
||||||
a firmware upload. The string will be one of the following:
|
a firmware upload. The string will be one of the following:
|
||||||
idle, "receiving", "preparing", "transferring", "programming".
|
idle, "receiving", "preparing", "transferring", "programming".
|
||||||
|
|
@ -70,7 +70,7 @@ Description: Read-only. Returns a string describing the current status of
|
||||||
What: /sys/class/firmware/.../timeout
|
What: /sys/class/firmware/.../timeout
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
KernelVersion: 5.19
|
KernelVersion: 5.19
|
||||||
Contact: Russ Weight <russell.h.weight@intel.com>
|
Contact: Russ Weight <russ.weight@linux.dev>
|
||||||
Description: This file supports the timeout mechanism for firmware
|
Description: This file supports the timeout mechanism for firmware
|
||||||
fallback. This file has no affect on firmware uploads. For
|
fallback. This file has no affect on firmware uploads. For
|
||||||
more information on timeouts please see the documentation
|
more information on timeouts please see the documentation
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ patternProperties:
|
||||||
required:
|
required:
|
||||||
- reg
|
- reg
|
||||||
|
|
||||||
additionalProperties: true
|
additionalProperties: false
|
||||||
|
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: /schemas/spi/spi-peripheral-props.yaml#
|
- $ref: /schemas/spi/spi-peripheral-props.yaml#
|
||||||
|
|
|
||||||
|
|
@ -45,5 +45,6 @@ examples:
|
||||||
light-sensor@38 {
|
light-sensor@38 {
|
||||||
compatible = "rohm,bu27010";
|
compatible = "rohm,bu27010";
|
||||||
reg = <0x38>;
|
reg = <0x38>;
|
||||||
|
vdd-supply = <&vdd>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -25,15 +25,15 @@ Contact
|
||||||
The Linux kernel hardware security team is separate from the regular Linux
|
The Linux kernel hardware security team is separate from the regular Linux
|
||||||
kernel security team.
|
kernel security team.
|
||||||
|
|
||||||
The team only handles the coordination of embargoed hardware security
|
The team only handles developing fixes for embargoed hardware security
|
||||||
issues. Reports of pure software security bugs in the Linux kernel are not
|
issues. Reports of pure software security bugs in the Linux kernel are not
|
||||||
handled by this team and the reporter will be guided to contact the regular
|
handled by this team and the reporter will be guided to contact the regular
|
||||||
Linux kernel security team (:ref:`Documentation/admin-guide/
|
Linux kernel security team (:ref:`Documentation/admin-guide/
|
||||||
<securitybugs>`) instead.
|
<securitybugs>`) instead.
|
||||||
|
|
||||||
The team can be contacted by email at <hardware-security@kernel.org>. This
|
The team can be contacted by email at <hardware-security@kernel.org>. This
|
||||||
is a private list of security officers who will help you to coordinate an
|
is a private list of security officers who will help you to coordinate a
|
||||||
issue according to our documented process.
|
fix according to our documented process.
|
||||||
|
|
||||||
The list is encrypted and email to the list can be sent by either PGP or
|
The list is encrypted and email to the list can be sent by either PGP or
|
||||||
S/MIME encrypted and must be signed with the reporter's PGP key or S/MIME
|
S/MIME encrypted and must be signed with the reporter's PGP key or S/MIME
|
||||||
|
|
@ -132,7 +132,7 @@ other hardware could be affected.
|
||||||
|
|
||||||
The hardware security team will provide an incident-specific encrypted
|
The hardware security team will provide an incident-specific encrypted
|
||||||
mailing-list which will be used for initial discussion with the reporter,
|
mailing-list which will be used for initial discussion with the reporter,
|
||||||
further disclosure and coordination.
|
further disclosure, and coordination of fixes.
|
||||||
|
|
||||||
The hardware security team will provide the disclosing party a list of
|
The hardware security team will provide the disclosing party a list of
|
||||||
developers (domain experts) who should be informed initially about the
|
developers (domain experts) who should be informed initially about the
|
||||||
|
|
@ -209,13 +209,18 @@ five work days this is taken as silent acknowledgement.
|
||||||
After acknowledgement or resolution of an objection the expert is disclosed
|
After acknowledgement or resolution of an objection the expert is disclosed
|
||||||
by the incident team and brought into the development process.
|
by the incident team and brought into the development process.
|
||||||
|
|
||||||
|
List participants may not communicate about the issue outside of the
|
||||||
|
private mailing list. List participants may not use any shared resources
|
||||||
|
(e.g. employer build farms, CI systems, etc) when working on patches.
|
||||||
|
|
||||||
|
|
||||||
Coordinated release
|
Coordinated release
|
||||||
"""""""""""""""""""
|
"""""""""""""""""""
|
||||||
|
|
||||||
The involved parties will negotiate the date and time where the embargo
|
The involved parties will negotiate the date and time where the embargo
|
||||||
ends. At that point the prepared mitigations are integrated into the
|
ends. At that point the prepared mitigations are integrated into the
|
||||||
relevant kernel trees and published.
|
relevant kernel trees and published. There is no pre-notification process:
|
||||||
|
fixes are published in public and available to everyone at the same time.
|
||||||
|
|
||||||
While we understand that hardware security issues need coordinated embargo
|
While we understand that hardware security issues need coordinated embargo
|
||||||
time, the embargo time should be constrained to the minimum time which is
|
time, the embargo time should be constrained to the minimum time which is
|
||||||
|
|
|
||||||
|
|
@ -8110,7 +8110,7 @@ F: include/linux/arm_ffa.h
|
||||||
|
|
||||||
FIRMWARE LOADER (request_firmware)
|
FIRMWARE LOADER (request_firmware)
|
||||||
M: Luis Chamberlain <mcgrof@kernel.org>
|
M: Luis Chamberlain <mcgrof@kernel.org>
|
||||||
M: Russ Weight <russell.h.weight@intel.com>
|
M: Russ Weight <russ.weight@linux.dev>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/firmware_class/
|
F: Documentation/firmware_class/
|
||||||
|
|
|
||||||
|
|
@ -4812,6 +4812,8 @@ static void binder_release_work(struct binder_proc *proc,
|
||||||
"undelivered TRANSACTION_ERROR: %u\n",
|
"undelivered TRANSACTION_ERROR: %u\n",
|
||||||
e->cmd);
|
e->cmd);
|
||||||
} break;
|
} break;
|
||||||
|
case BINDER_WORK_TRANSACTION_PENDING:
|
||||||
|
case BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT:
|
||||||
case BINDER_WORK_TRANSACTION_COMPLETE: {
|
case BINDER_WORK_TRANSACTION_COMPLETE: {
|
||||||
binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
|
binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
|
||||||
"undelivered TRANSACTION_COMPLETE\n");
|
"undelivered TRANSACTION_COMPLETE\n");
|
||||||
|
|
|
||||||
|
|
@ -247,8 +247,8 @@ static int counter_get_ext(const struct counter_comp *const ext,
|
||||||
if (*id == component_id)
|
if (*id == component_id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ext->type == COUNTER_COMP_ARRAY) {
|
if (ext[*ext_idx].type == COUNTER_COMP_ARRAY) {
|
||||||
element = ext->priv;
|
element = ext[*ext_idx].priv;
|
||||||
|
|
||||||
if (component_id - *id < element->length)
|
if (component_id - *id < element->length)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ static int mchp_tc_count_function_write(struct counter_device *counter,
|
||||||
priv->qdec_mode = 0;
|
priv->qdec_mode = 0;
|
||||||
/* Set highest rate based on whether soc has gclk or not */
|
/* Set highest rate based on whether soc has gclk or not */
|
||||||
bmr &= ~(ATMEL_TC_QDEN | ATMEL_TC_POSEN);
|
bmr &= ~(ATMEL_TC_QDEN | ATMEL_TC_POSEN);
|
||||||
if (priv->tc_cfg->has_gclk)
|
if (!priv->tc_cfg->has_gclk)
|
||||||
cmr |= ATMEL_TC_TIMER_CLOCK2;
|
cmr |= ATMEL_TC_TIMER_CLOCK2;
|
||||||
else
|
else
|
||||||
cmr |= ATMEL_TC_TIMER_CLOCK1;
|
cmr |= ATMEL_TC_TIMER_CLOCK1;
|
||||||
|
|
|
||||||
|
|
@ -610,7 +610,8 @@ static int tmc_etr_alloc_flat_buf(struct tmc_drvdata *drvdata,
|
||||||
|
|
||||||
flat_buf->vaddr = dma_alloc_noncoherent(real_dev, etr_buf->size,
|
flat_buf->vaddr = dma_alloc_noncoherent(real_dev, etr_buf->size,
|
||||||
&flat_buf->daddr,
|
&flat_buf->daddr,
|
||||||
DMA_FROM_DEVICE, GFP_KERNEL);
|
DMA_FROM_DEVICE,
|
||||||
|
GFP_KERNEL | __GFP_NOWARN);
|
||||||
if (!flat_buf->vaddr) {
|
if (!flat_buf->vaddr) {
|
||||||
kfree(flat_buf);
|
kfree(flat_buf);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
@ -1173,16 +1174,6 @@ static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* In sysFS mode we can have multiple writers per sink. Since this
|
|
||||||
* sink is already enabled no memory is needed and the HW need not be
|
|
||||||
* touched, even if the buffer size has changed.
|
|
||||||
*/
|
|
||||||
if (drvdata->mode == CS_MODE_SYSFS) {
|
|
||||||
atomic_inc(&csdev->refcnt);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we don't have a buffer or it doesn't match the requested size,
|
* If we don't have a buffer or it doesn't match the requested size,
|
||||||
* use the buffer allocated above. Otherwise reuse the existing buffer.
|
* use the buffer allocated above. Otherwise reuse the existing buffer.
|
||||||
|
|
@ -1204,7 +1195,7 @@ static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev)
|
||||||
|
|
||||||
static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev)
|
static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
|
struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
|
||||||
struct etr_buf *sysfs_buf = tmc_etr_get_sysfs_buffer(csdev);
|
struct etr_buf *sysfs_buf = tmc_etr_get_sysfs_buffer(csdev);
|
||||||
|
|
@ -1213,12 +1204,24 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev)
|
||||||
return PTR_ERR(sysfs_buf);
|
return PTR_ERR(sysfs_buf);
|
||||||
|
|
||||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In sysFS mode we can have multiple writers per sink. Since this
|
||||||
|
* sink is already enabled no memory is needed and the HW need not be
|
||||||
|
* touched, even if the buffer size has changed.
|
||||||
|
*/
|
||||||
|
if (drvdata->mode == CS_MODE_SYSFS) {
|
||||||
|
atomic_inc(&csdev->refcnt);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
ret = tmc_etr_enable_hw(drvdata, sysfs_buf);
|
ret = tmc_etr_enable_hw(drvdata, sysfs_buf);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
drvdata->mode = CS_MODE_SYSFS;
|
drvdata->mode = CS_MODE_SYSFS;
|
||||||
atomic_inc(&csdev->refcnt);
|
atomic_inc(&csdev->refcnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,7 @@ struct ad7192_chip_info {
|
||||||
struct ad7192_state {
|
struct ad7192_state {
|
||||||
const struct ad7192_chip_info *chip_info;
|
const struct ad7192_chip_info *chip_info;
|
||||||
struct regulator *avdd;
|
struct regulator *avdd;
|
||||||
|
struct regulator *vref;
|
||||||
struct clk *mclk;
|
struct clk *mclk;
|
||||||
u16 int_vref_mv;
|
u16 int_vref_mv;
|
||||||
u32 fclk;
|
u32 fclk;
|
||||||
|
|
@ -1008,11 +1009,31 @@ static int ad7192_probe(struct spi_device *spi)
|
||||||
if (ret)
|
if (ret)
|
||||||
return dev_err_probe(&spi->dev, ret, "Failed to enable specified DVdd supply\n");
|
return dev_err_probe(&spi->dev, ret, "Failed to enable specified DVdd supply\n");
|
||||||
|
|
||||||
|
st->vref = devm_regulator_get_optional(&spi->dev, "vref");
|
||||||
|
if (IS_ERR(st->vref)) {
|
||||||
|
if (PTR_ERR(st->vref) != -ENODEV)
|
||||||
|
return PTR_ERR(st->vref);
|
||||||
|
|
||||||
ret = regulator_get_voltage(st->avdd);
|
ret = regulator_get_voltage(st->avdd);
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
dev_err(&spi->dev, "Device tree error, reference voltage undefined\n");
|
return dev_err_probe(&spi->dev, ret,
|
||||||
|
"Device tree error, AVdd voltage undefined\n");
|
||||||
|
} else {
|
||||||
|
ret = regulator_enable(st->vref);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&spi->dev, "Failed to enable specified Vref supply\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = devm_add_action_or_reset(&spi->dev, ad7192_reg_disable, st->vref);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = regulator_get_voltage(st->vref);
|
||||||
|
if (ret < 0)
|
||||||
|
return dev_err_probe(&spi->dev, ret,
|
||||||
|
"Device tree error, Vref voltage undefined\n");
|
||||||
|
}
|
||||||
st->int_vref_mv = ret / 1000;
|
st->int_vref_mv = ret / 1000;
|
||||||
|
|
||||||
st->chip_info = of_device_get_match_data(&spi->dev);
|
st->chip_info = of_device_get_match_data(&spi->dev);
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@
|
||||||
#define IMX8QXP_ADR_ADC_FCTRL 0x30
|
#define IMX8QXP_ADR_ADC_FCTRL 0x30
|
||||||
#define IMX8QXP_ADR_ADC_SWTRIG 0x34
|
#define IMX8QXP_ADR_ADC_SWTRIG 0x34
|
||||||
#define IMX8QXP_ADR_ADC_TCTRL(tid) (0xc0 + (tid) * 4)
|
#define IMX8QXP_ADR_ADC_TCTRL(tid) (0xc0 + (tid) * 4)
|
||||||
#define IMX8QXP_ADR_ADC_CMDH(cid) (0x100 + (cid) * 8)
|
#define IMX8QXP_ADR_ADC_CMDL(cid) (0x100 + (cid) * 8)
|
||||||
#define IMX8QXP_ADR_ADC_CMDL(cid) (0x104 + (cid) * 8)
|
#define IMX8QXP_ADR_ADC_CMDH(cid) (0x104 + (cid) * 8)
|
||||||
#define IMX8QXP_ADR_ADC_RESFIFO 0x300
|
#define IMX8QXP_ADR_ADC_RESFIFO 0x300
|
||||||
#define IMX8QXP_ADR_ADC_TST 0xffc
|
#define IMX8QXP_ADR_ADC_TST 0xffc
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ config AD74413R
|
||||||
depends on GPIOLIB && SPI
|
depends on GPIOLIB && SPI
|
||||||
select REGMAP_SPI
|
select REGMAP_SPI
|
||||||
select CRC8
|
select CRC8
|
||||||
|
select IIO_BUFFER
|
||||||
|
select IIO_TRIGGERED_BUFFER
|
||||||
help
|
help
|
||||||
Say yes here to build support for Analog Devices AD74412R/AD74413R
|
Say yes here to build support for Analog Devices AD74412R/AD74413R
|
||||||
quad-channel software configurable input/output solution.
|
quad-channel software configurable input/output solution.
|
||||||
|
|
|
||||||
|
|
@ -190,8 +190,11 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,
|
||||||
/*
|
/*
|
||||||
* Ignore samples if the buffer is not set: it is needed if the ODR is
|
* Ignore samples if the buffer is not set: it is needed if the ODR is
|
||||||
* set but the buffer is not enabled yet.
|
* set but the buffer is not enabled yet.
|
||||||
|
*
|
||||||
|
* Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer
|
||||||
|
* is not enabled.
|
||||||
*/
|
*/
|
||||||
if (!iio_buffer_enabled(indio_dev))
|
if (iio_device_claim_buffer_mode(indio_dev) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out = (s16 *)st->samples;
|
out = (s16 *)st->samples;
|
||||||
|
|
@ -210,6 +213,7 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,
|
||||||
iio_push_to_buffers_with_timestamp(indio_dev, st->samples,
|
iio_push_to_buffers_with_timestamp(indio_dev, st->samples,
|
||||||
timestamp + delta);
|
timestamp + delta);
|
||||||
|
|
||||||
|
iio_device_release_buffer_mode(indio_dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cros_ec_sensors_push_data);
|
EXPORT_SYMBOL_GPL(cros_ec_sensors_push_data);
|
||||||
|
|
|
||||||
|
|
@ -140,8 +140,8 @@ enum ad3552r_ch_vref_select {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ad3542r_id {
|
enum ad3542r_id {
|
||||||
AD3542R_ID = 0x4008,
|
AD3542R_ID = 0x4009,
|
||||||
AD3552R_ID = 0x4009,
|
AD3552R_ID = 0x4008,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ad3552r_ch_output_range {
|
enum ad3552r_ch_output_range {
|
||||||
|
|
|
||||||
|
|
@ -351,9 +351,9 @@ static int admv1013_update_mixer_vgate(struct admv1013_state *st)
|
||||||
if (vcm < 0)
|
if (vcm < 0)
|
||||||
return vcm;
|
return vcm;
|
||||||
|
|
||||||
if (vcm < 1800000)
|
if (vcm <= 1800000)
|
||||||
mixer_vgate = (2389 * vcm / 1000000 + 8100) / 100;
|
mixer_vgate = (2389 * vcm / 1000000 + 8100) / 100;
|
||||||
else if (vcm > 1800000 && vcm < 2600000)
|
else if (vcm > 1800000 && vcm <= 2600000)
|
||||||
mixer_vgate = (2375 * vcm / 1000000 + 125) / 100;
|
mixer_vgate = (2375 * vcm / 1000000 + 125) / 100;
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
config BOSCH_BNO055
|
config BOSCH_BNO055
|
||||||
tristate
|
tristate
|
||||||
|
select IIO_BUFFER
|
||||||
|
select IIO_TRIGGERED_BUFFER
|
||||||
|
|
||||||
config BOSCH_BNO055_SERIAL
|
config BOSCH_BNO055_SERIAL
|
||||||
tristate "Bosch BNO055 attached via UART"
|
tristate "Bosch BNO055 attached via UART"
|
||||||
|
|
|
||||||
|
|
@ -1513,7 +1513,6 @@ static int vcnl4040_write_event_config(struct iio_dev *indio_dev,
|
||||||
|
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&data->vcnl4000_lock);
|
mutex_unlock(&data->vcnl4000_lock);
|
||||||
data->chip_spec->set_power_state(data, data->ps_int || data->als_int);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2179,7 +2179,7 @@ int bmp280_common_probe(struct device *dev,
|
||||||
* however as it happens, the BMP085 shares the chip ID of BMP180
|
* however as it happens, the BMP085 shares the chip ID of BMP180
|
||||||
* so we look for an IRQ if we have that.
|
* so we look for an IRQ if we have that.
|
||||||
*/
|
*/
|
||||||
if (irq > 0 || (chip_id == BMP180_CHIP_ID)) {
|
if (irq > 0 && (chip_id == BMP180_CHIP_ID)) {
|
||||||
ret = bmp085_fetch_eoc_irq(dev, name, irq, data);
|
ret = bmp085_fetch_eoc_irq(dev, name, irq, data);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@
|
||||||
#define DPS310_RESET_MAGIC 0x09
|
#define DPS310_RESET_MAGIC 0x09
|
||||||
#define DPS310_COEF_BASE 0x10
|
#define DPS310_COEF_BASE 0x10
|
||||||
|
|
||||||
/* Make sure sleep time is <= 20ms for usleep_range */
|
/* Make sure sleep time is <= 30ms for usleep_range */
|
||||||
#define DPS310_POLL_SLEEP_US(t) min(20000, (t) / 8)
|
#define DPS310_POLL_SLEEP_US(t) min(30000, (t) / 8)
|
||||||
/* Silently handle error in rate value here */
|
/* Silently handle error in rate value here */
|
||||||
#define DPS310_POLL_TIMEOUT_US(rc) ((rc) <= 0 ? 1000000 : 1000000 / (rc))
|
#define DPS310_POLL_TIMEOUT_US(rc) ((rc) <= 0 ? 1000000 : 1000000 / (rc))
|
||||||
|
|
||||||
|
|
@ -402,8 +402,8 @@ static int dps310_reset_wait(struct dps310_data *data)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
/* Wait for device chip access: 2.5ms in specification */
|
/* Wait for device chip access: 15ms in specification */
|
||||||
usleep_range(2500, 12000);
|
usleep_range(15000, 55000);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ static bool ms5611_prom_is_valid(u16 *prom, size_t len)
|
||||||
|
|
||||||
crc = (crc >> 12) & 0x000F;
|
crc = (crc >> 12) & 0x000F;
|
||||||
|
|
||||||
return crc_orig != 0x0000 && crc == crc_orig;
|
return crc == crc_orig;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ms5611_read_prom(struct iio_dev *indio_dev)
|
static int ms5611_read_prom(struct iio_dev *indio_dev)
|
||||||
|
|
|
||||||
|
|
@ -759,14 +759,14 @@ static irqreturn_t irsd200_trigger_handler(int irq, void *pollf)
|
||||||
{
|
{
|
||||||
struct iio_dev *indio_dev = ((struct iio_poll_func *)pollf)->indio_dev;
|
struct iio_dev *indio_dev = ((struct iio_poll_func *)pollf)->indio_dev;
|
||||||
struct irsd200_data *data = iio_priv(indio_dev);
|
struct irsd200_data *data = iio_priv(indio_dev);
|
||||||
s16 buf = 0;
|
s64 buf[2] = {};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = irsd200_read_data(data, &buf);
|
ret = irsd200_read_data(data, (s16 *)buf);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
iio_push_to_buffers_with_timestamp(indio_dev, &buf,
|
iio_push_to_buffers_with_timestamp(indio_dev, buf,
|
||||||
iio_get_time_ns(indio_dev));
|
iio_get_time_ns(indio_dev));
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
|
||||||
|
|
@ -387,17 +387,13 @@ EXPORT_SYMBOL_NS_GPL(mcb_free_dev, MCB);
|
||||||
|
|
||||||
static int __mcb_bus_add_devices(struct device *dev, void *data)
|
static int __mcb_bus_add_devices(struct device *dev, void *data)
|
||||||
{
|
{
|
||||||
struct mcb_device *mdev = to_mcb_device(dev);
|
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
if (mdev->is_added)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
retval = device_attach(dev);
|
retval = device_attach(dev);
|
||||||
if (retval < 0)
|
if (retval < 0) {
|
||||||
dev_err(dev, "Error adding device (%d)\n", retval);
|
dev_err(dev, "Error adding device (%d)\n", retval);
|
||||||
|
return retval;
|
||||||
mdev->is_added = true;
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,6 @@ static int chameleon_parse_gdd(struct mcb_bus *bus,
|
||||||
mdev->mem.end = mdev->mem.start + size - 1;
|
mdev->mem.end = mdev->mem.start + size - 1;
|
||||||
mdev->mem.flags = IORESOURCE_MEM;
|
mdev->mem.flags = IORESOURCE_MEM;
|
||||||
|
|
||||||
mdev->is_added = false;
|
|
||||||
|
|
||||||
ret = mcb_device_register(bus, mdev);
|
ret = mcb_device_register(bus, mdev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ static inline struct mcb_bus *to_mcb_bus(struct device *dev)
|
||||||
struct mcb_device {
|
struct mcb_device {
|
||||||
struct device dev;
|
struct device dev;
|
||||||
struct mcb_bus *bus;
|
struct mcb_bus *bus;
|
||||||
bool is_added;
|
|
||||||
struct mcb_driver *driver;
|
struct mcb_driver *driver;
|
||||||
u16 id;
|
u16 id;
|
||||||
int inst;
|
int inst;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue