mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
drm/bridge: it6505: Disable IRQ when powered off
When the bridge is powered off, disable the IRQ until the next power on to workaround an interrupt storm on some badly-designed hardware. Signed-off-by: Pin-yen Lin <treapking@chromium.org> Reviewed-by: Robert Foss <rfoss@kernel.org> Signed-off-by: Robert Foss <rfoss@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20240719110623.1850021-1-treapking@chromium.org
This commit is contained in:
parent
7214da0ed2
commit
10ba375366
@ -460,6 +460,8 @@ struct it6505 {
|
||||
bool enable_drv_hold;
|
||||
|
||||
const struct drm_edid *cached_edid;
|
||||
|
||||
int irq;
|
||||
};
|
||||
|
||||
struct it6505_step_train_para {
|
||||
@ -2624,6 +2626,8 @@ static int it6505_poweron(struct it6505 *it6505)
|
||||
it6505_init(it6505);
|
||||
it6505_lane_off(it6505);
|
||||
|
||||
enable_irq(it6505->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2640,6 +2644,8 @@ static int it6505_poweroff(struct it6505 *it6505)
|
||||
return 0;
|
||||
}
|
||||
|
||||
disable_irq_nosync(it6505->irq);
|
||||
|
||||
if (pdata->gpiod_reset)
|
||||
gpiod_set_value_cansleep(pdata->gpiod_reset, 0);
|
||||
|
||||
@ -3389,7 +3395,7 @@ static int it6505_i2c_probe(struct i2c_client *client)
|
||||
struct it6505 *it6505;
|
||||
struct device *dev = &client->dev;
|
||||
struct extcon_dev *extcon;
|
||||
int err, intp_irq;
|
||||
int err;
|
||||
|
||||
it6505 = devm_kzalloc(&client->dev, sizeof(*it6505), GFP_KERNEL);
|
||||
if (!it6505)
|
||||
@ -3430,17 +3436,18 @@ static int it6505_i2c_probe(struct i2c_client *client)
|
||||
|
||||
it6505_parse_dt(it6505);
|
||||
|
||||
intp_irq = client->irq;
|
||||
it6505->irq = client->irq;
|
||||
|
||||
if (!intp_irq) {
|
||||
if (!it6505->irq) {
|
||||
dev_err(dev, "Failed to get INTP IRQ");
|
||||
err = -ENODEV;
|
||||
return err;
|
||||
}
|
||||
|
||||
err = devm_request_threaded_irq(&client->dev, intp_irq, NULL,
|
||||
err = devm_request_threaded_irq(&client->dev, it6505->irq, NULL,
|
||||
it6505_int_threaded_handler,
|
||||
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
||||
IRQF_TRIGGER_LOW | IRQF_ONESHOT |
|
||||
IRQF_NO_AUTOEN,
|
||||
"it6505-intp", it6505);
|
||||
if (err) {
|
||||
dev_err(dev, "Failed to request INTP threaded IRQ: %d", err);
|
||||
|
Loading…
Reference in New Issue
Block a user