Skip to content

Commit 8d7ed10

Browse files
committed
Merge tag 'char-misc-5.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull char/misc driver fixes from Greg KH: "Here are a bunch of small char/misc and other driver subsystem fixes. Included in here are: - iio driver fixes for reported problems - phy driver fixes for a number of reported problems - mhi resume bugfix for broken hardware - nvmem driver fix - rtsx driver fix for irq issues - fastrpc packet parsing fix All of these have been in linux-next for a while with no reported issues" * tag 'char-misc-5.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (33 commits) bus: mhi: core: Add support for forced PM resume iio: trigger: stm32-timer: fix MODULE_ALIAS misc: rtsx: Avoid mangling IRQ during runtime PM nvmem: eeprom: at25: fix FRAM byte_len misc: fastrpc: fix improper packet size calculation MAINTAINERS: add maintainer for Qualcomm FastRPC driver bus: mhi: pci_generic: Fix device recovery failed issue iio: adc: stm32: fix null pointer on defer_probe error phy: HiSilicon: Fix copy and paste bug in error handling dt-bindings: phy: zynqmp-psgtr: fix USB phy name phy: ti: omap-usb2: Fix the kernel-doc style phy: qualcomm: ipq806x-usb: Fix kernel-doc style iio: at91-sama5d2: Fix incorrect sign extension iio: adc: axp20x_adc: fix charging current reporting on AXP22x iio: gyro: adxrs290: fix data signedness phy: ti: tusb1210: Fix the kernel-doc warn phy: qualcomm: usb-hsic: Fix the kernel-doc warn phy: qualcomm: qmp: Add missing struct documentation phy: mvebu-cp110-utmi: Fix kernel-doc warns iio: ad7768-1: Call iio_trigger_notify_done() on error ...
2 parents c7fc512 + cab2d3f commit 8d7ed10

34 files changed

+136
-102
lines changed

Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ properties:
2929
- PHY_TYPE_PCIE
3030
- PHY_TYPE_SATA
3131
- PHY_TYPE_SGMII
32-
- PHY_TYPE_USB
32+
- PHY_TYPE_USB3
3333
- description: The PHY instance
3434
minimum: 0
3535
maximum: 1 # for DP, SATA or USB

MAINTAINERS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15770,6 +15770,15 @@ S: Maintained
1577015770
F: Documentation/devicetree/bindings/net/qcom,ethqos.txt
1577115771
F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
1577215772

15773+
QUALCOMM FASTRPC DRIVER
15774+
M: Srinivas Kandagatla <[email protected]>
15775+
M: Amol Maheshwari <[email protected]>
15776+
15777+
S: Maintained
15778+
F: Documentation/devicetree/bindings/misc/qcom,fastrpc.txt
15779+
F: drivers/misc/fastrpc.c
15780+
F: include/uapi/misc/fastrpc.h
15781+
1577315782
QUALCOMM GENERIC INTERFACE I2C DRIVER
1577415783
M: Akash Asthana <[email protected]>
1577515784
M: Mukesh Savaliya <[email protected]>

drivers/bus/mhi/core/pm.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ int mhi_pm_suspend(struct mhi_controller *mhi_cntrl)
881881
}
882882
EXPORT_SYMBOL_GPL(mhi_pm_suspend);
883883

884-
int mhi_pm_resume(struct mhi_controller *mhi_cntrl)
884+
static int __mhi_pm_resume(struct mhi_controller *mhi_cntrl, bool force)
885885
{
886886
struct mhi_chan *itr, *tmp;
887887
struct device *dev = &mhi_cntrl->mhi_dev->dev;
@@ -898,8 +898,12 @@ int mhi_pm_resume(struct mhi_controller *mhi_cntrl)
898898
if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state))
899899
return -EIO;
900900

901-
if (mhi_get_mhi_state(mhi_cntrl) != MHI_STATE_M3)
902-
return -EINVAL;
901+
if (mhi_get_mhi_state(mhi_cntrl) != MHI_STATE_M3) {
902+
dev_warn(dev, "Resuming from non M3 state (%s)\n",
903+
TO_MHI_STATE_STR(mhi_get_mhi_state(mhi_cntrl)));
904+
if (!force)
905+
return -EINVAL;
906+
}
903907

904908
/* Notify clients about exiting LPM */
905909
list_for_each_entry_safe(itr, tmp, &mhi_cntrl->lpm_chans, node) {
@@ -940,8 +944,19 @@ int mhi_pm_resume(struct mhi_controller *mhi_cntrl)
940944

941945
return 0;
942946
}
947+
948+
int mhi_pm_resume(struct mhi_controller *mhi_cntrl)
949+
{
950+
return __mhi_pm_resume(mhi_cntrl, false);
951+
}
943952
EXPORT_SYMBOL_GPL(mhi_pm_resume);
944953

954+
int mhi_pm_resume_force(struct mhi_controller *mhi_cntrl)
955+
{
956+
return __mhi_pm_resume(mhi_cntrl, true);
957+
}
958+
EXPORT_SYMBOL_GPL(mhi_pm_resume_force);
959+
945960
int __mhi_device_get_sync(struct mhi_controller *mhi_cntrl)
946961
{
947962
int ret;

drivers/bus/mhi/pci_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
#define MHI_PCI_DEFAULT_BAR_NUM 0
2222

23-
#define MHI_POST_RESET_DELAY_MS 500
23+
#define MHI_POST_RESET_DELAY_MS 2000
2424

2525
#define HEALTH_CHECK_PERIOD (HZ * 2)
2626

drivers/iio/accel/kxcjk-1013.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,8 +1595,7 @@ static int kxcjk1013_probe(struct i2c_client *client,
15951595
return 0;
15961596

15971597
err_buffer_cleanup:
1598-
if (data->dready_trig)
1599-
iio_triggered_buffer_cleanup(indio_dev);
1598+
iio_triggered_buffer_cleanup(indio_dev);
16001599
err_trigger_unregister:
16011600
if (data->dready_trig)
16021601
iio_trigger_unregister(data->dready_trig);
@@ -1618,8 +1617,8 @@ static int kxcjk1013_remove(struct i2c_client *client)
16181617
pm_runtime_disable(&client->dev);
16191618
pm_runtime_set_suspended(&client->dev);
16201619

1620+
iio_triggered_buffer_cleanup(indio_dev);
16211621
if (data->dready_trig) {
1622-
iio_triggered_buffer_cleanup(indio_dev);
16231622
iio_trigger_unregister(data->dready_trig);
16241623
iio_trigger_unregister(data->motion_trig);
16251624
}

drivers/iio/accel/kxsd9.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,14 +224,14 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p)
224224
hw_values.chan,
225225
sizeof(hw_values.chan));
226226
if (ret) {
227-
dev_err(st->dev,
228-
"error reading data\n");
229-
return ret;
227+
dev_err(st->dev, "error reading data: %d\n", ret);
228+
goto out;
230229
}
231230

232231
iio_push_to_buffers_with_timestamp(indio_dev,
233232
&hw_values,
234233
iio_get_time_ns(indio_dev));
234+
out:
235235
iio_trigger_notify_done(indio_dev->trig);
236236

237237
return IRQ_HANDLED;

drivers/iio/accel/mma8452.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1470,7 +1470,7 @@ static int mma8452_trigger_setup(struct iio_dev *indio_dev)
14701470
if (ret)
14711471
return ret;
14721472

1473-
indio_dev->trig = trig;
1473+
indio_dev->trig = iio_trigger_get(trig);
14741474

14751475
return 0;
14761476
}

drivers/iio/adc/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ config IMX7D_ADC
532532

533533
config IMX8QXP_ADC
534534
tristate "NXP IMX8QXP ADC driver"
535-
depends on ARCH_MXC_ARM64 || COMPILE_TEST
535+
depends on ARCH_MXC || COMPILE_TEST
536536
depends on HAS_IOMEM
537537
help
538538
Say yes here to build support for IMX8QXP ADC.

drivers/iio/adc/ad7768-1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,8 @@ static irqreturn_t ad7768_trigger_handler(int irq, void *p)
480480
iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan,
481481
iio_get_time_ns(indio_dev));
482482

483-
iio_trigger_notify_done(indio_dev->trig);
484483
err_unlock:
484+
iio_trigger_notify_done(indio_dev->trig);
485485
mutex_unlock(&st->lock);
486486

487487
return IRQ_HANDLED;

drivers/iio/adc/at91-sama5d2_adc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1586,7 +1586,8 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
15861586
*val = st->conversion_value;
15871587
ret = at91_adc_adjust_val_osr(st, val);
15881588
if (chan->scan_type.sign == 's')
1589-
*val = sign_extend32(*val, 11);
1589+
*val = sign_extend32(*val,
1590+
chan->scan_type.realbits - 1);
15901591
st->conversion_done = false;
15911592
}
15921593

drivers/iio/adc/axp20x_adc.c

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -251,19 +251,8 @@ static int axp22x_adc_raw(struct iio_dev *indio_dev,
251251
struct iio_chan_spec const *chan, int *val)
252252
{
253253
struct axp20x_adc_iio *info = iio_priv(indio_dev);
254-
int size;
255254

256-
/*
257-
* N.B.: Unlike the Chinese datasheets tell, the charging current is
258-
* stored on 12 bits, not 13 bits. Only discharging current is on 13
259-
* bits.
260-
*/
261-
if (chan->type == IIO_CURRENT && chan->channel == AXP22X_BATT_DISCHRG_I)
262-
size = 13;
263-
else
264-
size = 12;
265-
266-
*val = axp20x_read_variable_width(info->regmap, chan->address, size);
255+
*val = axp20x_read_variable_width(info->regmap, chan->address, 12);
267256
if (*val < 0)
268257
return *val;
269258

@@ -386,9 +375,8 @@ static int axp22x_adc_scale(struct iio_chan_spec const *chan, int *val,
386375
return IIO_VAL_INT_PLUS_MICRO;
387376

388377
case IIO_CURRENT:
389-
*val = 0;
390-
*val2 = 500000;
391-
return IIO_VAL_INT_PLUS_MICRO;
378+
*val = 1;
379+
return IIO_VAL_INT;
392380

393381
case IIO_TEMP:
394382
*val = 100;

drivers/iio/adc/dln2-adc.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ static int dln2_adc_set_chan_period(struct dln2_adc *dln2,
248248
static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)
249249
{
250250
int ret, i;
251-
struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev);
252251
u16 conflict;
253252
__le16 value;
254253
int olen = sizeof(value);
@@ -257,13 +256,9 @@ static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)
257256
.chan = channel,
258257
};
259258

260-
ret = iio_device_claim_direct_mode(indio_dev);
261-
if (ret < 0)
262-
return ret;
263-
264259
ret = dln2_adc_set_chan_enabled(dln2, channel, true);
265260
if (ret < 0)
266-
goto release_direct;
261+
return ret;
267262

268263
ret = dln2_adc_set_port_enabled(dln2, true, &conflict);
269264
if (ret < 0) {
@@ -300,8 +295,6 @@ static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)
300295
dln2_adc_set_port_enabled(dln2, false, NULL);
301296
disable_chan:
302297
dln2_adc_set_chan_enabled(dln2, channel, false);
303-
release_direct:
304-
iio_device_release_direct_mode(indio_dev);
305298

306299
return ret;
307300
}
@@ -337,10 +330,16 @@ static int dln2_adc_read_raw(struct iio_dev *indio_dev,
337330

338331
switch (mask) {
339332
case IIO_CHAN_INFO_RAW:
333+
ret = iio_device_claim_direct_mode(indio_dev);
334+
if (ret < 0)
335+
return ret;
336+
340337
mutex_lock(&dln2->mutex);
341338
ret = dln2_adc_read(dln2, chan->channel);
342339
mutex_unlock(&dln2->mutex);
343340

341+
iio_device_release_direct_mode(indio_dev);
342+
344343
if (ret < 0)
345344
return ret;
346345

@@ -656,7 +655,11 @@ static int dln2_adc_probe(struct platform_device *pdev)
656655
return -ENOMEM;
657656
}
658657
iio_trigger_set_drvdata(dln2->trig, dln2);
659-
devm_iio_trigger_register(dev, dln2->trig);
658+
ret = devm_iio_trigger_register(dev, dln2->trig);
659+
if (ret) {
660+
dev_err(dev, "failed to register trigger: %d\n", ret);
661+
return ret;
662+
}
660663
iio_trigger_set_immutable(indio_dev, dln2->trig);
661664

662665
ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,

drivers/iio/adc/stm32-adc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,7 @@ static void stm32h7_adc_unprepare(struct iio_dev *indio_dev)
11171117
{
11181118
struct stm32_adc *adc = iio_priv(indio_dev);
11191119

1120+
stm32_adc_writel(adc, STM32H7_ADC_PCSEL, 0);
11201121
stm32h7_adc_disable(indio_dev);
11211122
stm32_adc_int_ch_disable(adc);
11221123
stm32h7_adc_enter_pwr_down(adc);
@@ -1986,7 +1987,7 @@ static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_n
19861987
/* Get calibration data for vrefint channel */
19871988
ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint);
19881989
if (ret && ret != -ENOENT) {
1989-
return dev_err_probe(&indio_dev->dev, ret,
1990+
return dev_err_probe(indio_dev->dev.parent, ret,
19901991
"nvmem access error\n");
19911992
}
19921993
if (ret == -ENOENT)

drivers/iio/gyro/adxrs290.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88

99
#include <linux/bitfield.h>
10+
#include <linux/bitops.h>
1011
#include <linux/delay.h>
1112
#include <linux/device.h>
1213
#include <linux/kernel.h>
@@ -124,7 +125,7 @@ static int adxrs290_get_rate_data(struct iio_dev *indio_dev, const u8 cmd, int *
124125
goto err_unlock;
125126
}
126127

127-
*val = temp;
128+
*val = sign_extend32(temp, 15);
128129

129130
err_unlock:
130131
mutex_unlock(&st->lock);
@@ -146,7 +147,7 @@ static int adxrs290_get_temp_data(struct iio_dev *indio_dev, int *val)
146147
}
147148

148149
/* extract lower 12 bits temperature reading */
149-
*val = temp & 0x0FFF;
150+
*val = sign_extend32(temp, 11);
150151

151152
err_unlock:
152153
mutex_unlock(&st->lock);

drivers/iio/gyro/itg3200_buffer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ static irqreturn_t itg3200_trigger_handler(int irq, void *p)
6161

6262
iio_push_to_buffers_with_timestamp(indio_dev, &scan, pf->timestamp);
6363

64+
error_ret:
6465
iio_trigger_notify_done(indio_dev->trig);
6566

66-
error_ret:
6767
return IRQ_HANDLED;
6868
}
6969

drivers/iio/industrialio-trigger.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,6 @@ struct iio_trigger *viio_trigger_alloc(struct device *parent,
556556
irq_modify_status(trig->subirq_base + i,
557557
IRQ_NOREQUEST | IRQ_NOAUTOEN, IRQ_NOPROBE);
558558
}
559-
get_device(&trig->dev);
560559

561560
return trig;
562561

drivers/iio/light/ltr501.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,7 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)
12751275
ret = regmap_bulk_read(data->regmap, LTR501_ALS_DATA1,
12761276
als_buf, sizeof(als_buf));
12771277
if (ret < 0)
1278-
return ret;
1278+
goto done;
12791279
if (test_bit(0, indio_dev->active_scan_mask))
12801280
scan.channels[j++] = le16_to_cpu(als_buf[1]);
12811281
if (test_bit(1, indio_dev->active_scan_mask))

drivers/iio/light/stk3310.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,9 +546,8 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private)
546546
mutex_lock(&data->lock);
547547
ret = regmap_field_read(data->reg_flag_nf, &dir);
548548
if (ret < 0) {
549-
dev_err(&data->client->dev, "register read failed\n");
550-
mutex_unlock(&data->lock);
551-
return ret;
549+
dev_err(&data->client->dev, "register read failed: %d\n", ret);
550+
goto out;
552551
}
553552
event = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, 1,
554553
IIO_EV_TYPE_THRESH,
@@ -560,6 +559,7 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private)
560559
ret = regmap_field_write(data->reg_flag_psint, 0);
561560
if (ret < 0)
562561
dev_err(&data->client->dev, "failed to reset interrupts\n");
562+
out:
563563
mutex_unlock(&data->lock);
564564

565565
return IRQ_HANDLED;

drivers/iio/trigger/stm32-timer-trigger.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,6 @@ static struct platform_driver stm32_timer_trigger_driver = {
912912
};
913913
module_platform_driver(stm32_timer_trigger_driver);
914914

915-
MODULE_ALIAS("platform: stm32-timer-trigger");
915+
MODULE_ALIAS("platform:stm32-timer-trigger");
916916
MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver");
917917
MODULE_LICENSE("GPL v2");

drivers/misc/cardreader/rtsx_pcr.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,8 +1803,6 @@ static int rtsx_pci_runtime_suspend(struct device *device)
18031803
mutex_lock(&pcr->pcr_mutex);
18041804
rtsx_pci_power_off(pcr, HOST_ENTER_S3);
18051805

1806-
free_irq(pcr->irq, (void *)pcr);
1807-
18081806
mutex_unlock(&pcr->pcr_mutex);
18091807

18101808
pcr->is_runtime_suspended = true;
@@ -1825,8 +1823,6 @@ static int rtsx_pci_runtime_resume(struct device *device)
18251823
mutex_lock(&pcr->pcr_mutex);
18261824

18271825
rtsx_pci_write_register(pcr, HOST_SLEEP_STATE, 0x03, 0x00);
1828-
rtsx_pci_acquire_irq(pcr);
1829-
synchronize_irq(pcr->irq);
18301826

18311827
if (pcr->ops->fetch_vendor_settings)
18321828
pcr->ops->fetch_vendor_settings(pcr);

0 commit comments

Comments
 (0)