Commit f5b6eb1e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c fixes from Wolfram Sang:
 "Some more bugfixes from I2C for v5.13. Usual stuff"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: qcom-geni: Suspend and resume the bus during SYSTEM_SLEEP_PM ops
  i2c: qcom-geni: Add shutdown callback for i2c
  i2c: tegra-bpmp: Demote kernel-doc abuses
  i2c: altera: Fix formatting issue in struct and demote unworthy kernel-doc headers
parents e5220dd1 57648e86
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
#define ALTR_I2C_XFER_TIMEOUT (msecs_to_jiffies(250)) #define ALTR_I2C_XFER_TIMEOUT (msecs_to_jiffies(250))
/** /**
* altr_i2c_dev - I2C device context * struct altr_i2c_dev - I2C device context
* @base: pointer to register struct * @base: pointer to register struct
* @msg: pointer to current message * @msg: pointer to current message
* @msg_len: number of bytes transferred in msg * @msg_len: number of bytes transferred in msg
...@@ -172,7 +172,7 @@ static void altr_i2c_init(struct altr_i2c_dev *idev) ...@@ -172,7 +172,7 @@ static void altr_i2c_init(struct altr_i2c_dev *idev)
altr_i2c_int_enable(idev, ALTR_I2C_ALL_IRQ, false); altr_i2c_int_enable(idev, ALTR_I2C_ALL_IRQ, false);
} }
/** /*
* altr_i2c_transfer - On the last byte to be transmitted, send * altr_i2c_transfer - On the last byte to be transmitted, send
* a Stop bit on the last byte. * a Stop bit on the last byte.
*/ */
...@@ -185,7 +185,7 @@ static void altr_i2c_transfer(struct altr_i2c_dev *idev, u32 data) ...@@ -185,7 +185,7 @@ static void altr_i2c_transfer(struct altr_i2c_dev *idev, u32 data)
writel(data, idev->base + ALTR_I2C_TFR_CMD); writel(data, idev->base + ALTR_I2C_TFR_CMD);
} }
/** /*
* altr_i2c_empty_rx_fifo - Fetch data from RX FIFO until end of * altr_i2c_empty_rx_fifo - Fetch data from RX FIFO until end of
* transfer. Send a Stop bit on the last byte. * transfer. Send a Stop bit on the last byte.
*/ */
...@@ -201,9 +201,8 @@ static void altr_i2c_empty_rx_fifo(struct altr_i2c_dev *idev) ...@@ -201,9 +201,8 @@ static void altr_i2c_empty_rx_fifo(struct altr_i2c_dev *idev)
} }
} }
/** /*
* altr_i2c_fill_tx_fifo - Fill TX FIFO from current message buffer. * altr_i2c_fill_tx_fifo - Fill TX FIFO from current message buffer.
* @return: Number of bytes left to transfer.
*/ */
static int altr_i2c_fill_tx_fifo(struct altr_i2c_dev *idev) static int altr_i2c_fill_tx_fifo(struct altr_i2c_dev *idev)
{ {
......
...@@ -650,6 +650,14 @@ static int geni_i2c_remove(struct platform_device *pdev) ...@@ -650,6 +650,14 @@ static int geni_i2c_remove(struct platform_device *pdev)
return 0; return 0;
} }
static void geni_i2c_shutdown(struct platform_device *pdev)
{
struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev);
/* Make client i2c transfers start failing */
i2c_mark_adapter_suspended(&gi2c->adap);
}
static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev) static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev)
{ {
int ret; int ret;
...@@ -690,6 +698,8 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev) ...@@ -690,6 +698,8 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev)
{ {
struct geni_i2c_dev *gi2c = dev_get_drvdata(dev); struct geni_i2c_dev *gi2c = dev_get_drvdata(dev);
i2c_mark_adapter_suspended(&gi2c->adap);
if (!gi2c->suspended) { if (!gi2c->suspended) {
geni_i2c_runtime_suspend(dev); geni_i2c_runtime_suspend(dev);
pm_runtime_disable(dev); pm_runtime_disable(dev);
...@@ -699,8 +709,16 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev) ...@@ -699,8 +709,16 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev)
return 0; return 0;
} }
static int __maybe_unused geni_i2c_resume_noirq(struct device *dev)
{
struct geni_i2c_dev *gi2c = dev_get_drvdata(dev);
i2c_mark_adapter_resumed(&gi2c->adap);
return 0;
}
static const struct dev_pm_ops geni_i2c_pm_ops = { static const struct dev_pm_ops geni_i2c_pm_ops = {
SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, NULL) SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, geni_i2c_resume_noirq)
SET_RUNTIME_PM_OPS(geni_i2c_runtime_suspend, geni_i2c_runtime_resume, SET_RUNTIME_PM_OPS(geni_i2c_runtime_suspend, geni_i2c_runtime_resume,
NULL) NULL)
}; };
...@@ -714,6 +732,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_match); ...@@ -714,6 +732,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_match);
static struct platform_driver geni_i2c_driver = { static struct platform_driver geni_i2c_driver = {
.probe = geni_i2c_probe, .probe = geni_i2c_probe,
.remove = geni_i2c_remove, .remove = geni_i2c_remove,
.shutdown = geni_i2c_shutdown,
.driver = { .driver = {
.name = "geni_i2c", .name = "geni_i2c",
.pm = &geni_i2c_pm_ops, .pm = &geni_i2c_pm_ops,
......
...@@ -65,7 +65,7 @@ static void tegra_bpmp_xlate_flags(u16 flags, u16 *out) ...@@ -65,7 +65,7 @@ static void tegra_bpmp_xlate_flags(u16 flags, u16 *out)
*out |= SERIALI2C_RECV_LEN; *out |= SERIALI2C_RECV_LEN;
} }
/** /*
* The serialized I2C format is simply the following: * The serialized I2C format is simply the following:
* [addr little-endian][flags little-endian][len little-endian][data if write] * [addr little-endian][flags little-endian][len little-endian][data if write]
* [addr little-endian][flags little-endian][len little-endian][data if write] * [addr little-endian][flags little-endian][len little-endian][data if write]
...@@ -109,7 +109,7 @@ static void tegra_bpmp_serialize_i2c_msg(struct tegra_bpmp_i2c *i2c, ...@@ -109,7 +109,7 @@ static void tegra_bpmp_serialize_i2c_msg(struct tegra_bpmp_i2c *i2c,
request->xfer.data_size = pos; request->xfer.data_size = pos;
} }
/** /*
* The data in the BPMP -> CPU direction is composed of sequential blocks for * The data in the BPMP -> CPU direction is composed of sequential blocks for
* those messages that have I2C_M_RD. So, for example, if you have: * those messages that have I2C_M_RD. So, for example, if you have:
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment