diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/media/cec | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/media/cec')
| -rw-r--r-- | drivers/media/cec/core/cec-adap.c | 15 | ||||
| -rw-r--r-- | drivers/media/cec/core/cec-core.c | 2 | ||||
| -rw-r--r-- | drivers/media/cec/core/cec-priv.h | 1 | ||||
| -rw-r--r-- | drivers/media/cec/platform/cec-gpio/cec-gpio.c | 5 | ||||
| -rw-r--r-- | drivers/media/cec/platform/cros-ec/cros-ec-cec.c | 22 | ||||
| -rw-r--r-- | drivers/media/cec/platform/meson/ao-cec-g12a.c | 6 | ||||
| -rw-r--r-- | drivers/media/cec/platform/meson/ao-cec.c | 6 | ||||
| -rw-r--r-- | drivers/media/cec/platform/s5p/s5p_cec.c | 5 | ||||
| -rw-r--r-- | drivers/media/cec/platform/seco/seco-cec.c | 6 | ||||
| -rw-r--r-- | drivers/media/cec/platform/sti/stih-cec.c | 6 | ||||
| -rw-r--r-- | drivers/media/cec/platform/stm32/stm32-cec.c | 6 | ||||
| -rw-r--r-- | drivers/media/cec/platform/tegra/tegra_cec.c | 6 | 
12 files changed, 44 insertions, 42 deletions
diff --git a/drivers/media/cec/core/cec-adap.c b/drivers/media/cec/core/cec-adap.c index 4f5ab3cae8a7..241b1621b197 100644 --- a/drivers/media/cec/core/cec-adap.c +++ b/drivers/media/cec/core/cec-adap.c @@ -1052,6 +1052,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,  	u8 cmd = msg->msg[1];  	bool is_reply = false;  	bool valid_la = true; +	bool monitor_valid_la = true;  	u8 min_len = 0;  	if (WARN_ON(!msg->len || msg->len > CEC_MAX_MSG_SIZE)) @@ -1090,11 +1091,14 @@ void cec_received_msg_ts(struct cec_adapter *adap,  	mutex_lock(&adap->lock);  	dprintk(2, "%s: %*ph\n", __func__, msg->len, msg->msg); -	adap->last_initiator = 0xff; +	if (!adap->transmit_in_progress) +		adap->last_initiator = 0xff;  	/* Check if this message was for us (directed or broadcast). */ -	if (!cec_msg_is_broadcast(msg)) +	if (!cec_msg_is_broadcast(msg)) {  		valid_la = cec_has_log_addr(adap, msg_dest); +		monitor_valid_la = valid_la; +	}  	/*  	 * Check if the length is not too short or if the message is a @@ -1227,7 +1231,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,  	mutex_unlock(&adap->lock);  	/* Pass the message on to any monitoring filehandles */ -	cec_queue_msg_monitor(adap, msg, valid_la); +	cec_queue_msg_monitor(adap, msg, monitor_valid_la);  	/* We're done if it is not for us or a poll message */  	if (!valid_la || msg->len <= 1) @@ -1582,7 +1586,7 @@ static void cec_claim_log_addrs(struct cec_adapter *adap, bool block)   *   * This function is called with adap->lock held.   */ -static int cec_adap_enable(struct cec_adapter *adap) +int cec_adap_enable(struct cec_adapter *adap)  {  	bool enable;  	int ret = 0; @@ -1592,6 +1596,9 @@ static int cec_adap_enable(struct cec_adapter *adap)  	if (adap->needs_hpd)  		enable = enable && adap->phys_addr != CEC_PHYS_ADDR_INVALID; +	if (adap->devnode.unregistered) +		enable = false; +  	if (enable == adap->is_enabled)  		return 0; diff --git a/drivers/media/cec/core/cec-core.c b/drivers/media/cec/core/cec-core.c index af358e901b5f..7e153c5cad04 100644 --- a/drivers/media/cec/core/cec-core.c +++ b/drivers/media/cec/core/cec-core.c @@ -191,6 +191,8 @@ static void cec_devnode_unregister(struct cec_adapter *adap)  	mutex_lock(&adap->lock);  	__cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false);  	__cec_s_log_addrs(adap, NULL, false); +	// Disable the adapter (since adap->devnode.unregistered is true) +	cec_adap_enable(adap);  	mutex_unlock(&adap->lock);  	cdev_device_del(&devnode->cdev, &devnode->dev); diff --git a/drivers/media/cec/core/cec-priv.h b/drivers/media/cec/core/cec-priv.h index b78df931aa74..ed1f8c67626b 100644 --- a/drivers/media/cec/core/cec-priv.h +++ b/drivers/media/cec/core/cec-priv.h @@ -47,6 +47,7 @@ int cec_monitor_pin_cnt_inc(struct cec_adapter *adap);  void cec_monitor_pin_cnt_dec(struct cec_adapter *adap);  int cec_adap_status(struct seq_file *file, void *priv);  int cec_thread_func(void *_adap); +int cec_adap_enable(struct cec_adapter *adap);  void __cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, bool block);  int __cec_s_log_addrs(struct cec_adapter *adap,  		      struct cec_log_addrs *log_addrs, bool block); diff --git a/drivers/media/cec/platform/cec-gpio/cec-gpio.c b/drivers/media/cec/platform/cec-gpio/cec-gpio.c index c8c4efc83f5f..ff34490fd869 100644 --- a/drivers/media/cec/platform/cec-gpio/cec-gpio.c +++ b/drivers/media/cec/platform/cec-gpio/cec-gpio.c @@ -269,13 +269,12 @@ del_adap:  	return ret;  } -static int cec_gpio_remove(struct platform_device *pdev) +static void cec_gpio_remove(struct platform_device *pdev)  {  	struct cec_gpio *cec = platform_get_drvdata(pdev);  	cec_notifier_cec_adap_unregister(cec->notifier, cec->adap);  	cec_unregister_adapter(cec->adap); -	return 0;  }  static const struct of_device_id cec_gpio_match[] = { @@ -288,7 +287,7 @@ MODULE_DEVICE_TABLE(of, cec_gpio_match);  static struct platform_driver cec_gpio_pdrv = {  	.probe	= cec_gpio_probe, -	.remove = cec_gpio_remove, +	.remove_new = cec_gpio_remove,  	.driver = {  		.name		= "cec-gpio",  		.of_match_table	= cec_gpio_match, diff --git a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c index 6ebedc71d67d..c17faf002877 100644 --- a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c +++ b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c @@ -225,6 +225,12 @@ static const struct cec_dmi_match cec_dmi_match_table[] = {  	{ "Google", "Kinox", "0000:00:02.0", "Port B" },  	/* Google Kuldax */  	{ "Google", "Kuldax", "0000:00:02.0", "Port B" }, +	/* Google Aurash */ +	{ "Google", "Aurash", "0000:00:02.0", "Port B" }, +	/* Google Gladios */ +	{ "Google", "Gladios", "0000:00:02.0", "Port B" }, +	/* Google Lisbon */ +	{ "Google", "Lisbon", "0000:00:02.0", "Port B" },  };  static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev, @@ -326,31 +332,31 @@ out_probe_adapter:  	return ret;  } -static int cros_ec_cec_remove(struct platform_device *pdev) +static void cros_ec_cec_remove(struct platform_device *pdev)  {  	struct cros_ec_cec *cros_ec_cec = platform_get_drvdata(pdev);  	struct device *dev = &pdev->dev;  	int ret; +	/* +	 * blocking_notifier_chain_unregister() only fails if the notifier isn't +	 * in the list. We know it was added to it by .probe(), so there should +	 * be no need for error checking. Be cautious and still check. +	 */  	ret = blocking_notifier_chain_unregister(  			&cros_ec_cec->cros_ec->event_notifier,  			&cros_ec_cec->notifier); - -	if (ret) { +	if (ret)  		dev_err(dev, "failed to unregister notifier\n"); -		return ret; -	}  	cec_notifier_cec_adap_unregister(cros_ec_cec->notify,  					 cros_ec_cec->adap);  	cec_unregister_adapter(cros_ec_cec->adap); - -	return 0;  }  static struct platform_driver cros_ec_cec_driver = {  	.probe = cros_ec_cec_probe, -	.remove  = cros_ec_cec_remove, +	.remove_new = cros_ec_cec_remove,  	.driver = {  		.name = DRV_NAME,  		.pm = &cros_ec_cec_pm_ops, diff --git a/drivers/media/cec/platform/meson/ao-cec-g12a.c b/drivers/media/cec/platform/meson/ao-cec-g12a.c index 68fe6d6a8178..51294b9b6cd5 100644 --- a/drivers/media/cec/platform/meson/ao-cec-g12a.c +++ b/drivers/media/cec/platform/meson/ao-cec-g12a.c @@ -744,7 +744,7 @@ out_probe_adapter:  	return ret;  } -static int meson_ao_cec_g12a_remove(struct platform_device *pdev) +static void meson_ao_cec_g12a_remove(struct platform_device *pdev)  {  	struct meson_ao_cec_g12a_device *ao_cec = platform_get_drvdata(pdev); @@ -753,8 +753,6 @@ static int meson_ao_cec_g12a_remove(struct platform_device *pdev)  	cec_notifier_cec_adap_unregister(ao_cec->notify, ao_cec->adap);  	cec_unregister_adapter(ao_cec->adap); - -	return 0;  }  static const struct meson_ao_cec_g12a_data ao_cec_g12a_data = { @@ -780,7 +778,7 @@ MODULE_DEVICE_TABLE(of, meson_ao_cec_g12a_of_match);  static struct platform_driver meson_ao_cec_g12a_driver = {  	.probe   = meson_ao_cec_g12a_probe, -	.remove  = meson_ao_cec_g12a_remove, +	.remove_new = meson_ao_cec_g12a_remove,  	.driver  = {  		.name = "meson-ao-cec-g12a",  		.of_match_table = of_match_ptr(meson_ao_cec_g12a_of_match), diff --git a/drivers/media/cec/platform/meson/ao-cec.c b/drivers/media/cec/platform/meson/ao-cec.c index 6b440f0635d9..f6f51a34f7bd 100644 --- a/drivers/media/cec/platform/meson/ao-cec.c +++ b/drivers/media/cec/platform/meson/ao-cec.c @@ -696,7 +696,7 @@ out_probe_adapter:  	return ret;  } -static int meson_ao_cec_remove(struct platform_device *pdev) +static void meson_ao_cec_remove(struct platform_device *pdev)  {  	struct meson_ao_cec_device *ao_cec = platform_get_drvdata(pdev); @@ -704,8 +704,6 @@ static int meson_ao_cec_remove(struct platform_device *pdev)  	cec_notifier_cec_adap_unregister(ao_cec->notify, ao_cec->adap);  	cec_unregister_adapter(ao_cec->adap); - -	return 0;  }  static const struct of_device_id meson_ao_cec_of_match[] = { @@ -716,7 +714,7 @@ MODULE_DEVICE_TABLE(of, meson_ao_cec_of_match);  static struct platform_driver meson_ao_cec_driver = {  	.probe   = meson_ao_cec_probe, -	.remove  = meson_ao_cec_remove, +	.remove_new = meson_ao_cec_remove,  	.driver  = {  		.name = "meson-ao-cec",  		.of_match_table = of_match_ptr(meson_ao_cec_of_match), diff --git a/drivers/media/cec/platform/s5p/s5p_cec.c b/drivers/media/cec/platform/s5p/s5p_cec.c index 0a30e7acdc10..51ab4a80aafe 100644 --- a/drivers/media/cec/platform/s5p/s5p_cec.c +++ b/drivers/media/cec/platform/s5p/s5p_cec.c @@ -249,14 +249,13 @@ err_delete_adapter:  	return ret;  } -static int s5p_cec_remove(struct platform_device *pdev) +static void s5p_cec_remove(struct platform_device *pdev)  {  	struct s5p_cec_dev *cec = platform_get_drvdata(pdev);  	cec_notifier_cec_adap_unregister(cec->notifier, cec->adap);  	cec_unregister_adapter(cec->adap);  	pm_runtime_disable(&pdev->dev); -	return 0;  }  static int __maybe_unused s5p_cec_runtime_suspend(struct device *dev) @@ -295,7 +294,7 @@ MODULE_DEVICE_TABLE(of, s5p_cec_match);  static struct platform_driver s5p_cec_pdrv = {  	.probe	= s5p_cec_probe, -	.remove	= s5p_cec_remove, +	.remove_new = s5p_cec_remove,  	.driver	= {  		.name		= CEC_NAME,  		.of_match_table	= s5p_cec_match, diff --git a/drivers/media/cec/platform/seco/seco-cec.c b/drivers/media/cec/platform/seco/seco-cec.c index 580905e3d066..5d4c5a2cae09 100644 --- a/drivers/media/cec/platform/seco/seco-cec.c +++ b/drivers/media/cec/platform/seco/seco-cec.c @@ -668,7 +668,7 @@ err:  	return ret;  } -static int secocec_remove(struct platform_device *pdev) +static void secocec_remove(struct platform_device *pdev)  {  	struct secocec_data *secocec = platform_get_drvdata(pdev);  	u16 val; @@ -686,8 +686,6 @@ static int secocec_remove(struct platform_device *pdev)  	release_region(BRA_SMB_BASE_ADDR, 7);  	dev_dbg(&pdev->dev, "CEC device removed\n"); - -	return 0;  }  #ifdef CONFIG_PM_SLEEP @@ -780,7 +778,7 @@ static struct platform_driver secocec_driver = {  		   .pm = SECOCEC_PM_OPS,  	},  	.probe = secocec_probe, -	.remove = secocec_remove, +	.remove_new = secocec_remove,  };  module_platform_driver(secocec_driver); diff --git a/drivers/media/cec/platform/sti/stih-cec.c b/drivers/media/cec/platform/sti/stih-cec.c index 4edbdd09535d..a20fc5c0c88d 100644 --- a/drivers/media/cec/platform/sti/stih-cec.c +++ b/drivers/media/cec/platform/sti/stih-cec.c @@ -364,14 +364,12 @@ err_delete_adapter:  	return ret;  } -static int stih_cec_remove(struct platform_device *pdev) +static void stih_cec_remove(struct platform_device *pdev)  {  	struct stih_cec *cec = platform_get_drvdata(pdev);  	cec_notifier_cec_adap_unregister(cec->notifier, cec->adap);  	cec_unregister_adapter(cec->adap); - -	return 0;  }  static const struct of_device_id stih_cec_match[] = { @@ -384,7 +382,7 @@ MODULE_DEVICE_TABLE(of, stih_cec_match);  static struct platform_driver stih_cec_pdrv = {  	.probe	= stih_cec_probe, -	.remove = stih_cec_remove, +	.remove_new = stih_cec_remove,  	.driver = {  		.name		= CEC_NAME,  		.of_match_table	= stih_cec_match, diff --git a/drivers/media/cec/platform/stm32/stm32-cec.c b/drivers/media/cec/platform/stm32/stm32-cec.c index 7b2db46a5722..ada3d153362a 100644 --- a/drivers/media/cec/platform/stm32/stm32-cec.c +++ b/drivers/media/cec/platform/stm32/stm32-cec.c @@ -344,7 +344,7 @@ err_unprepare_cec_clk:  	return ret;  } -static int stm32_cec_remove(struct platform_device *pdev) +static void stm32_cec_remove(struct platform_device *pdev)  {  	struct stm32_cec *cec = platform_get_drvdata(pdev); @@ -352,8 +352,6 @@ static int stm32_cec_remove(struct platform_device *pdev)  	clk_unprepare(cec->clk_hdmi_cec);  	cec_unregister_adapter(cec->adap); - -	return 0;  }  static const struct of_device_id stm32_cec_of_match[] = { @@ -364,7 +362,7 @@ MODULE_DEVICE_TABLE(of, stm32_cec_of_match);  static struct platform_driver stm32_cec_driver = {  	.probe  = stm32_cec_probe, -	.remove = stm32_cec_remove, +	.remove_new = stm32_cec_remove,  	.driver = {  		.name		= CEC_NAME,  		.of_match_table = stm32_cec_of_match, diff --git a/drivers/media/cec/platform/tegra/tegra_cec.c b/drivers/media/cec/platform/tegra/tegra_cec.c index 5e907395ca2e..04dc06e3c42a 100644 --- a/drivers/media/cec/platform/tegra/tegra_cec.c +++ b/drivers/media/cec/platform/tegra/tegra_cec.c @@ -421,7 +421,7 @@ err_clk:  	return ret;  } -static int tegra_cec_remove(struct platform_device *pdev) +static void tegra_cec_remove(struct platform_device *pdev)  {  	struct tegra_cec *cec = platform_get_drvdata(pdev); @@ -429,8 +429,6 @@ static int tegra_cec_remove(struct platform_device *pdev)  	cec_notifier_cec_adap_unregister(cec->notifier, cec->adap);  	cec_unregister_adapter(cec->adap); - -	return 0;  }  #ifdef CONFIG_PM @@ -467,7 +465,7 @@ static struct platform_driver tegra_cec_driver = {  		.of_match_table = of_match_ptr(tegra_cec_of_match),  	},  	.probe = tegra_cec_probe, -	.remove = tegra_cec_remove, +	.remove_new = tegra_cec_remove,  #ifdef CONFIG_PM  	.suspend = tegra_cec_suspend,  |