soundwire: qcom: add mmio support
Subsystems (3)
cover soundwire: qcom: add mmio support
This adds initial support for soundwire device on sm8250.
Tested with the "wsa" sdw device, which is simpler than the others.
Jonathan Marek (5):
soundwire: qcom: fix abh/ahb typo
soundwire: qcom: add support for mmio soundwire devices
soundwire: qcom: add v1.5.1 compatible
soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
soundwire: qcom: enable CPU interrupts for mmio devices
drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 42 +++++++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-)
Signature · 1 line
2.26.1
PATCH 1/5 soundwire: qcom: fix abh/ahb typo
The function name qcom_swrm_abh_reg_read should say ahb, fix that.
--- drivers/soundwire/qcom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/soundwire/qcom.c +2 -2
@@ -114,7 +114,7 @@ struct qcom_swrm_ctrl {#define to_qcom_sdw (b) container_of(b, struct qcom_swrm_ctrl, bus) -static int qcom_swrm_abh_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +static int qcom_swrm_ahb_reg_read (struct qcom_swrm_ctrl *ctrl,int reg,u32 *val) {struct regmap *wcd_regmap = ctrl->regmap;
@@ -754,7 +754,7 @@ static int qcom_swrm_probe(struct platform_device *pdev)return -ENOMEM ;if (dev->parent->bus == &slimbus_bus) { - ctrl->reg_read = qcom_swrm_abh_reg_read; + ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)
Signature · 1 line
2.26.1
Re: [PATCH 1/5] soundwire: qcom: fix abh/ahb typo
Quoted 4 lines · Jonathan Marek
The function name
qcom_swrm_abh_reg_readshould say ahb, fix that.Signed-off-by Jonathan Marek <[email protected]>---
Quoted 26 lines
drivers/soundwire/qcom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +2
-2@@ -114,7 +114,7 @@ struct qcom_swrm_ctrl {#define to_qcom_sdw (b) container_of(b, struct qcom_swrm_ctrl, bus) -static int qcom_swrm_abh_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +static int qcom_swrm_ahb_reg_read (struct qcom_swrm_ctrl *ctrl,int reg,u32 *val) {struct regmap *wcd_regmap = ctrl->regmap;@@ -754,7 +754,7 @@ static int qcom_swrm_probe(struct platform_device *pdev)return -ENOMEM ;if (dev->parent->bus == &slimbus_bus) { - ctrl->reg_read = qcom_swrm_abh_reg_read; + ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)
PATCH 2/5 soundwire: qcom: add support for mmio soundwire devices
In reply to Jonathan MarekAdds support for qcom soundwire devices with memory mapped IO registers.
--- drivers/soundwire/qcom.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
drivers/soundwire/qcom.c +23 -2
@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl {struct sdw_bus bus;struct device *dev;struct regmap *regmap; +void __iomem *mmio;struct completion *comp;struct work_struct slave_work;/* read/write lock */
@@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl,return SDW_CMD_OK ; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +u32 *val) +{ + *val =readl (ctrl->mmio + reg); +return SDW_CMD_OK ; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, +int val) +{ +writel (val, ctrl->mmio + reg); +return SDW_CMD_OK ; +} +static int qcom_swrm_cmd_fifo_wr_cmd (struct qcom_swrm_ctrl *ctrl,u8 cmd_data,u8 dev_addr,u16 reg_addr) {
@@ -746,6 +761,7 @@ static int qcom_swrm_probe(struct platform_device *pdev)struct sdw_master_prop *prop;struct sdw_bus_params *params;struct qcom_swrm_ctrl *ctrl; +struct resource *res;int ret;u32 val;
@@ -760,8 +776,13 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl->regmap)return -EINVAL ; }else { -/* Only WCD based SoundWire controller is supported */ -return -ENOTSUPP ; + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + + ctrl->reg_read = qcom_swrm_cpu_reg_read; + ctrl->reg_write = qcom_swrm_cpu_reg_write; + ctrl->mmio =devm_ioremap_resource (dev, res); +if (IS_ERR (ctrl->mmio)) +return PTR_ERR (ctrl->mmio); } ctrl->irq =of_irq_get (dev->of_node,0 );
Signature · 1 line
2.26.1
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
Quoted 1 line · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
'device' is an ambiguous term for SoundWire.
Seems to me this is a SoundWire Master device directly accessed with mmio registers instead of over a SLIMbus link?
Quoted 48 lines
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/qcom.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +16
-0@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl {struct sdw_bus bus;struct device *dev;struct regmap *regmap; +void __iomem *mmio;struct completion *comp;struct work_struct slave_work;/* read/write lock */ @@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl,return SDW_CMD_OK ; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +u32 *val) +{ + *val =readl (ctrl->mmio + reg); +return SDW_CMD_OK ; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, +int val) +{ +writel (val, ctrl->mmio + reg); +return SDW_CMD_OK ; +} +static int qcom_swrm_cmd_fifo_wr_cmd (struct qcom_swrm_ctrl *ctrl,u8 cmd_data,u8 dev_addr,u16 reg_addr) {@@ -746,6 +761,7 @@ static int qcom_swrm_probe(struct platform_device *pdev)struct sdw_master_prop *prop;struct sdw_bus_params *params;struct qcom_swrm_ctrl *ctrl; +struct resource *res;int ret;u32 val;
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 764
Quoted 5 lines
drivers/soundwire/qcom.c +0
-2@@ -760,8 +776,13 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl->regmap)return -EINVAL ; }else { -/* Only WCD based SoundWire controller is supported */ -return -ENOTSUPP ;
I would move patch4 before this one, and add the functionality *after* removing the SLIMbus dependency.
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 785
Quoted 7 lines
drivers/soundwire/qcom.c +7
-0+ res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + + ctrl->reg_read = qcom_swrm_cpu_reg_read; + ctrl->reg_write = qcom_swrm_cpu_reg_write; + ctrl->mmio =devm_ioremap_resource (dev, res); +if (IS_ERR (ctrl->mmio)) +return PTR_ERR (ctrl->mmio);
maybe deal with the resource checks before setting callbacks?
There are quite a few drivers who do things this way:
clk/qcom/common.c- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);clk/qcom/common.c: base = devm_ioremap_resource(dev, res);
--
Quoted 4 lines
drivers/soundwire/qcom.c +0
-0} ctrl->irq =of_irq_get (dev->of_node,0 );
Vinod Koul
maintainerRe: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
In reply to Jonathan MarekHi Jonathan,
Quoted 1 line · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Please use 'SoundWire Master devices' instead :)
Quoted 25 lines
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/qcom.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +4
-0@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl {struct sdw_bus bus;struct device *dev;struct regmap *regmap; +void __iomem *mmio;struct completion *comp;struct work_struct slave_work;/* read/write lock */ @@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl,return SDW_CMD_OK ; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +u32 *val) +{
drivers/soundwire/qcom.c static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl, · line 170
Quoted 10 lines
drivers/soundwire/qcom.c +10
-0+ *val =readl (ctrl->mmio + reg); +return SDW_CMD_OK ; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, +int val) +{ +writel (val, ctrl->mmio + reg); +return SDW_CMD_OK ; +}
this looks fine but regmap supports mmio also, so I am thinking we should remove these and set regmap (mmio/slim)... Srini..?
Signature · 1 line
~Vinod
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
Quoted 29 lines · Vinod Koul
Hi Jonathan,
Quoted 1 line · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Please use 'SoundWire Master devices' instead :)
Quoted 22 lines
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/qcom.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +1
-0@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl {struct sdw_bus bus;struct device *dev;struct regmap *regmap; +void __iomem *mmio;struct completion *comp;struct work_struct slave_work;/* read/write lock */ @@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl,return SDW_CMD_OK ; }
Quoted 16 lines
drivers/soundwire/qcom.c static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl, · line 170
Quoted 13 lines
drivers/soundwire/qcom.c +13
-0+static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +u32 *val) +{ + *val =readl (ctrl->mmio + reg); +return SDW_CMD_OK ; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, +int val) +{ +writel (val, ctrl->mmio + reg); +return SDW_CMD_OK ; +}this looks fine but regmap supports mmio also, so I am thinking we should remove these and set regmap (mmio/slim)... Srini..?
That is doable, but not going to add great value in this case, unless we are having another layer of abstraction. So keeping it as readl/writel seems okay to me.
--srini
Quoted 1 line
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
Quoted 50 lines · Srinivas Kandagatla
Quoted 38 lines · Vinod Koul
Hi Jonathan,
Quoted 1 line · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Please use 'SoundWire Master devices' instead :)
Quoted 31 lines
Signed-off-by Jonathan Marek <[email protected]>---
drivers/soundwire/qcom.c| 25 +++++++++++++++++++++++--1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +9
-0@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl { struct sdw_bus bus; struct device *dev; struct regmap *regmap; + void __iomem *mmio; struct completion *comp; struct work_struct slave_work; /* read/write lock */@@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(structqcom_swrm_ctrl *ctrl, return SDW_CMD_OK; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, + u32 *val) +{ + *val = readl(ctrl->mmio + reg); + return SDW_CMD_OK; +} + +static int qcom_swrm_cpu_reg_write(struct qcom_swrm_ctrl *ctrl, int reg,Quoted 8 lines
drivers/soundwire/qcom.c static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl, · line 170
Quoted 5 lines
drivers/soundwire/qcom.c +5
-0+ int val) +{ + writel(val, ctrl->mmio + reg); + return SDW_CMD_OK; +}this looks fine but regmap supports mmio also, so I am thinking we should remove these and set regmap (mmio/slim)... Srini..?
Quoted 2 lines
That is doable, but not going to add great value in this case, unless we are having another layer of abstraction. So keeping it as readl/writel seems okay to me.
Adding to this, the slim case doesn't use the regmap directly, it goes through AHB_BRIDGE registers. So using a single regmap path is not "doable" (at least not in a nice way IMO).
Quoted 4 lines
--srini
Quoted 1 line
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
In reply to Jonathan MarekQuoted 4 lines · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Signed-off-by Jonathan Marek <[email protected]>---
In general patch itself looks pretty trivial, but I would like to see what 1.5.1 controller provides in terms of error reporting of SoundWire slave register reads/writes. On WCD based controller we did not have a mechanism to report things like if the read is ignored or not. I was hoping that this version of controller would be able to report that.
I will be nice to those patches if that is something which is supported in this version.
--srini
Quoted 61 lines
drivers/soundwire/qcom.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +23
-2@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl {struct sdw_bus bus;struct device *dev;struct regmap *regmap; +void __iomem *mmio;struct completion *comp;struct work_struct slave_work;/* read/write lock */ @@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(struct qcom_swrm_ctrl *ctrl,return SDW_CMD_OK ; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, +u32 *val) +{ + *val =readl (ctrl->mmio + reg); +return SDW_CMD_OK ; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, +int val) +{ +writel (val, ctrl->mmio + reg); +return SDW_CMD_OK ; +} +static int qcom_swrm_cmd_fifo_wr_cmd (struct qcom_swrm_ctrl *ctrl,u8 cmd_data,u8 dev_addr,u16 reg_addr) {@@ -746,6 +761,7 @@ static int qcom_swrm_probe(struct platform_device *pdev)struct sdw_master_prop *prop;struct sdw_bus_params *params;struct qcom_swrm_ctrl *ctrl; +struct resource *res;int ret;u32 val;@@ -760,8 +776,13 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl->regmap)return -EINVAL ; }else { -/* Only WCD based SoundWire controller is supported */ -return -ENOTSUPP ; + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + + ctrl->reg_read = qcom_swrm_cpu_reg_read; + ctrl->reg_write = qcom_swrm_cpu_reg_write; + ctrl->mmio =devm_ioremap_resource (dev, res); +if (IS_ERR (ctrl->mmio)) +return PTR_ERR (ctrl->mmio); } ctrl->irq =of_irq_get (dev->of_node,0 );
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
Quoted 5 lines · Srinivas Kandagatla
Quoted 2 lines · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Quoted 9 lines
Quoted 2 lines
Signed-off-by Jonathan Marek <[email protected]>---
In general patch itself looks pretty trivial, but I would like to see what 1.5.1 controller provides in terms of error reporting of SoundWire slave register reads/writes. On WCD based controller we did not have a mechanism to report things like if the read is ignored or not. I was hoping that this version of controller would be able to report that.
I will be nice to those patches if that is something which is supported in this version.
--srini
It does seem to support additional error reporting (it gets an error during enumeration after finding the 2 WSA slaves). However the downstream driver seems to disable this by setting BIT(31) in FIFO_CFG_ADDR (the comment says "For SWR master version 1.5.1, continue execute on command ignore"). Outside of the initial enumeration, it doesn't seem to produce any extra errors (still relying on the timeout mechanism to know if read/write is ignored).
Quoted 61 lines
Quoted 61 lines
drivers/soundwire/qcom.c| 25 +++++++++++++++++++++++--1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +23
-2@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl { struct sdw_bus bus; struct device *dev; struct regmap *regmap; + void __iomem *mmio; struct completion *comp; struct work_struct slave_work; /* read/write lock */@@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(structqcom_swrm_ctrl *ctrl, return SDW_CMD_OK; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, + u32 *val) +{ + *val = readl(ctrl->mmio + reg); + return SDW_CMD_OK; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, + int val) +{ + writel(val, ctrl->mmio + reg); + return SDW_CMD_OK; +} + static int qcom_swrm_cmd_fifo_wr_cmd(struct qcom_swrm_ctrl *ctrl, u8 cmd_data, u8 dev_addr, u16 reg_addr) {@@ -746,6 +761,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) struct sdw_master_prop *prop; struct sdw_bus_params *params; struct qcom_swrm_ctrl *ctrl; + struct resource *res; int ret; u32 val;@@ -760,8 +776,13 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl->regmap) return -EINVAL; } else { - /* Only WCD based SoundWire controller is supported */ - return -ENOTSUPP; + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + + ctrl->reg_read = qcom_swrm_cpu_reg_read; + ctrl->reg_write = qcom_swrm_cpu_reg_write; + ctrl->mmio = devm_ioremap_resource(dev, res); + if (IS_ERR(ctrl->mmio)) + return PTR_ERR(ctrl->mmio); } ctrl->irq = of_irq_get(dev->of_node, 0);
Re: [PATCH 2/5] soundwire: qcom: add support for mmio soundwire devices
Quoted 9 lines · Jonathan Marek
Quoted 8 lines · Srinivas Kandagatla
Quoted 4 lines · Jonathan Marek
Adds support for qcom soundwire devices with memory mapped IO registers.
Signed-off-by Jonathan Marek <[email protected]>---
Quoted 8 lines
Quoted 6 lines
In general patch itself looks pretty trivial, but I would like to see what 1.5.1 controller provides in terms of error reporting of SoundWire slave register reads/writes. On WCD based controller we did not have a mechanism to report things like if the read is ignored or not. I was hoping that this version of controller would be able to report that.
I will be nice to those patches if that is something which is supported in this version.
--srini
It does seem to support additional error reporting (it gets an error during enumeration after finding the 2 WSA slaves). However the downstream driver seems to disable this by setting BIT(31) in
FIFO_CFG_ADDR(the comment says "For SWR master version 1.5.1, continue execute on command ignore"). Outside of the initial enumeration, it doesn't seem to produce any extra errors (still relying on the timeout mechanism to know if read/write is ignored).
1.5.* versions support reporting CMD_NACKED in FIFO_STATUS register, so you should use that instead of timeout mechanism which is used for 1.3.0 which did not have support for this.
thanks,
srini
Quoted 63 lines
Quoted 63 lines
Quoted 63 lines
drivers/soundwire/qcom.c| 25 +++++++++++++++++++++++--1 file changed, 23 insertions(+), 2 deletions(-)drivers/soundwire/qcom.c +15
-0@@ -90,6 +90,7 @@ struct qcom_swrm_ctrl { struct sdw_bus bus; struct device *dev; struct regmap *regmap; + void __iomem *mmio; struct completion *comp; struct work_struct slave_work; /* read/write lock */@@ -154,6 +155,20 @@ static int qcom_swrm_ahb_reg_write(structqcom_swrm_ctrl *ctrl, return SDW_CMD_OK; } +static int qcom_swrm_cpu_reg_read (struct qcom_swrm_ctrl *ctrl,int reg, + u32 *val) +{ + *val = readl(ctrl->mmio + reg); + return SDW_CMD_OK; +} + +static int qcom_swrm_cpu_reg_write (struct qcom_swrm_ctrl *ctrl,int reg, + int val) +{ + writel(val, ctrl->mmio + reg); + return SDW_CMD_OK; +} + static int qcom_swrm_cmd_fifo_wr_cmd(struct qcom_swrm_ctrl *ctrl, u8 cmd_data, u8 dev_addr, u16 reg_addr){
drivers/soundwire/qcom.c +8
-2@@ -746,6 +761,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) struct sdw_master_prop *prop; struct sdw_bus_params *params; struct qcom_swrm_ctrl *ctrl; + struct resource *res; int ret; u32 val;@@ -760,8 +776,13 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl->regmap) return -EINVAL; } else { - /* Only WCD based SoundWire controller is supported */ - return -ENOTSUPP; + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + + ctrl->reg_read = qcom_swrm_cpu_reg_read; + ctrl->reg_write = qcom_swrm_cpu_reg_write; + ctrl->mmio = devm_ioremap_resource(dev, res); + if (IS_ERR(ctrl->mmio)) + return PTR_ERR(ctrl->mmio); } ctrl->irq = of_irq_get(dev->of_node, 0);
PATCH 3/5 soundwire: qcom: add v1.5.1 compatible
In reply to Jonathan MarekAdd a compatible string for HW version v1.5.1 on sm8250 SoCs.
--- drivers/soundwire/qcom.c | 1 + 1 file changed, 1 insertion(+)
drivers/soundwire/qcom.c +1 -0
@@ -880,6 +880,7 @@ static int qcom_swrm_remove(struct platform_device *pdev)static const struct of_device_id qcom_swrm_of_match[] = { { .compatible ="qcom,soundwire-v1.3.0" , }, + { .compatible ="qcom,soundwire-v1.5.1" , }, {/* sentinel */ }, };
Signature · 1 line
2.26.1
Vinod Koul
maintainerRe: [PATCH 3/5] soundwire: qcom: add v1.5.1 compatible
Quoted 1 line · Jonathan Marek
Add a compatible string for HW version v1.5.1 on sm8250 SoCs.
Please document this new compatible
Signature · 1 line
~Vinod
Re: [PATCH 3/5] soundwire: qcom: add v1.5.1 compatible
Quoted 5 lines · Vinod Koul
Quoted 1 line · Jonathan Marek
Add a compatible string for HW version v1.5.1 on sm8250 SoCs.
Please document this new compatible
Does it really need to be documented? The documentation already says the compatible should be "qcom,soundwire-v<MAJOR>.<MINOR>.<STEP>". It gives "qcom,soundwire-v1.5.0" as an example, which is not actually a supported compatible, so my understanding is we don't need to update the list of examples with every possible compatible.
Re: [PATCH 3/5] soundwire: qcom: add v1.5.1 compatible
Quoted 8 lines · Jonathan Marek
Quoted 5 lines · Vinod Koul
Quoted 1 line · Jonathan Marek
Add a compatible string for HW version v1.5.1 on sm8250 SoCs.
Please document this new compatible
Does it really need to be documented? The documentation already says the compatible should be "qcom,soundwire-v<MAJOR>.<MINOR>.<STEP>". It gives "qcom,soundwire-v1.5.0" as an example, which is not actually a supported compatible, so my understanding is we don't need to update the list of examples with every possible compatible.
checkpatch should have reported about this, and in future once we convert to yaml and list the compatible strings then dt_binding_check would fail too. So there is no harm in adding an additional compatible string for this new entry.
--srini
PATCH 4/5 soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
In reply to Jonathan MarekThe driver may be used without slimbus, so don't depend on slimbus.
--- drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/soundwire/Kconfig +0 -1
@@ -33,7 +33,6 @@ config SOUNDWIRE_INTEL config SOUNDWIRE_QCOM tristate "Qualcomm SoundWire Master driver" - depends on SLIMBUS depends on SND_SOC help SoundWire Qualcomm Master driver.
drivers/soundwire/qcom.c +5 -0
@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl)return -ENOMEM ; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else +if (false) { +#endif ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)return -EINVAL ; }else { + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Signature · 1 line
2.26.1
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
Quoted 30 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-1@@ -33,7 +33,6 @@ config SOUNDWIRE_INTEL config SOUNDWIRE_QCOM tristate "Qualcomm SoundWire Master driver" - depends on SLIMBUS depends on SND_SOC help SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +1
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl)return -ENOMEM ; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) {
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 783
Quoted 10 lines
drivers/soundwire/qcom.c +4
-0+#else +if (false) { +#endif ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)return -EINVAL ; }else { +
Oops, ended up with a stray whitespace here, will fix for v2.
Quoted 4 lines
drivers/soundwire/qcom.c +0
-0res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
In reply to Jonathan MarekQuoted 25 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-1@@ -33,7 +33,6 @@ config SOUNDWIRE_INTEL config SOUNDWIRE_QCOM tristate "Qualcomm SoundWire Master driver" - depends on SLIMBUS depends on SND_SOC help SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl)return -ENOMEM ; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else +if (false) { +#endif
maybe:
if (IS_ENABLED(CONFIG_SLIMBUS) &&
dev->parent->bus == &slimbus_bus)
Quoted 11 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)return -EINVAL ; }else { + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
Quoted 39 lines · Pierre-Louis Bossart
Quoted 24 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>---
drivers/soundwire/Kconfig| 1 -
drivers/soundwire/qcom.c | 5 +++++2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-0@@ -33,7 +33,6 @@ config SOUNDWIRE_INTELconfig
SOUNDWIRE_QCOM
tristate "Qualcomm SoundWire Master driver"
- depends on SLIMBUS
depends onSND_SOC
help
SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0drivers/soundwire/qcom.c static int qcom_swrm_probe(struct · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl) return -ENOMEM; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else + if (false) { +#endif maybe:
Quoted 4 lines
if (
IS_ENABLED(CONFIG_SLIMBUS)&&
dev->parent->bus==&slimbus_bus)
It won't compile like this, because "slimbus_bus" is not defined when CONFIG_SLIMBUS is disabled.
Quoted 10 lines
Quoted 10 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap = dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) return -EINVAL; } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
In reply to Jonathan MarekQuoted 13 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-0
drivers/soundwire/Kconfig config SOUNDWIRE_INTEL · line 36
Quoted 5 lines
drivers/soundwire/Kconfig +0
-1@@ -33,7 +33,6 @@ config SOUNDWIRE_INTEL config SOUNDWIRE_QCOM tristate "Qualcomm SoundWire Master driver" - depends on SLIMBUS depends on SND_SOC
Why not move this to imply SLIMBUS this will give more flexibility!
Quoted 7 lines
drivers/soundwire/Kconfig +0
-0help SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl)return -ENOMEM ; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else +if (false) { +#endif
May be you can do bit more cleanup here, which could endup like:
ctrl->regmap = dev_get_regmap(dev->parent, NULL);
if (!ctrl->regmap) {
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res) {
ctrl->mmio = devm_ioremap_resource(dev, res);
if (IS_ERR(ctrl->mmio)) {
dev_err(dev, "No valid mem resource found\n");
return PTR_ERR(ctrl->mmio);
}
ctrl->reg_read = qcom_swrm_cpu_reg_read;
ctrl->reg_write = qcom_swrm_cpu_reg_write;
} else {
dev_err(dev, "No valid slim resource found\n");
return -EINVAL;
}
} else {
ctrl->reg_read = qcom_swrm_ahb_reg_read;
ctrl->reg_write = qcom_swrm_ahb_reg_write;
}thanks,
srini
Quoted 11 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)return -EINVAL ; }else { + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
Quoted 11 lines · Srinivas Kandagatla
Quoted 8 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>---
drivers/soundwire/Kconfig| 1 -
drivers/soundwire/qcom.c | 5 +++++2 files changed, 5 insertions(+), 1 deletion(-)
Quoted 13 lines
Quoted 9 lines
drivers/soundwire/Kconfig +0
-0@@ -33,7 +33,6 @@ config SOUNDWIRE_INTELconfig
SOUNDWIRE_QCOM
tristate "Qualcomm SoundWire Master driver"
- depends on SLIMBUS
depends onSND_SOCWhy not move this to imply SLIMBUS this will give more flexibility!
If you mean to change it to "select SLIMBUS", I'd prefer not to, because this would increase code size unnecessarily in my kernel.
Quoted 42 lines
Quoted 7 lines
help
SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0drivers/soundwire/qcom.c static int qcom_swrm_probe(struct · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl) return -ENOMEM; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else + if (false) { +#endif May be you can do bit more cleanup here, which could endup like:
ctrl->regmap=dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) {
res =platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res) {
ctrl->mmio=devm_ioremap_resource(dev, res); if (IS_ERR(ctrl->mmio)) {
dev_err(dev, "No valid mem resource found\n"); returnPTR_ERR(ctrl->mmio);
}
ctrl->reg_read=qcom_swrm_cpu_reg_read;ctrl->reg_write=qcom_swrm_cpu_reg_write; } else {
dev_err(dev, "No valid slim resource found\n"); return-EINVAL;
}
} else {
ctrl->reg_read =qcom_swrm_ahb_reg_read;ctrl->reg_write=qcom_swrm_ahb_reg_write;
}
Quoted 2 lines
thanks,
srini
I don't think this is better, it feels more obfuscated, and I think its possible we may end up with the mmio sdw having a parent with a regmap. (it is not how I did things up in my upstream stack, but in downstream the sdw nodes are inside the "macro" codec nodes)
I understand the '#ifdef CONFIG_SLIMBUS'/'dev->parent->bus == &slimbus_bus' is ugly, but at least its clear what's going on. Unless you have a better suggestion?
Quoted 10 lines
Quoted 10 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap = dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) return -EINVAL; } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
Quoted 26 lines · Jonathan Marek
Quoted 11 lines · Srinivas Kandagatla
Quoted 8 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>---
drivers/soundwire/Kconfig| 1 -
drivers/soundwire/qcom.c | 5 +++++2 files changed, 5 insertions(+), 1 deletion(-)Quoted 13 lines
Quoted 9 lines
drivers/soundwire/Kconfig +0
-0@@ -33,7 +33,6 @@ config SOUNDWIRE_INTELconfig
SOUNDWIRE_QCOM
tristate "Qualcomm SoundWire Master driver"
- depends on SLIMBUS
depends onSND_SOCWhy not move this to imply SLIMBUS this will give more flexibility!
Quoted 1 line
If you mean to change it to "select SLIMBUS", I'd prefer not to, because this would increase code size unnecessarily in my kernel.
imply is week select, which means that this driver can be built without SLIMBus selected. So removing reference to slimbus_bus is necessary in this case.
On the other hand, SLIMBus is going to be used sm8250 for BT audio, so this would not be unnecessary. Also mostly these are build as modules, so not sure why kernel size will increase here!
Am not 100% sure if SLIMBus will be kept on all SoCs, but keeping depends or imply in place would enforce or spell out some level of dependency on this.
Quoted 43 lines
Quoted 43 lines
Quoted 8 lines
help
SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0drivers/soundwire/qcom.c static int qcom_swrm_probe(struct · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl) return -ENOMEM; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else + if (false) { +#endif May be you can do bit more cleanup here, which could endup like:
ctrl->regmap=dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) {
res =platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res) {
ctrl->mmio=devm_ioremap_resource(dev, res); if (IS_ERR(ctrl->mmio)) {
dev_err(dev, "No valid mem resource found\n"); returnPTR_ERR(ctrl->mmio);
}
ctrl->reg_read=qcom_swrm_cpu_reg_read;ctrl->reg_write=qcom_swrm_cpu_reg_write; } else {
dev_err(dev, "No valid slim resource found\n"); return-EINVAL;
}
} else {
ctrl->reg_read =qcom_swrm_ahb_reg_read;ctrl->reg_write=qcom_swrm_ahb_reg_write; }
Quoted 6 lines
Quoted 2 lines
thanks,
sriniI don't think this is better, it feels more obfuscated, and I think its possible we may end up with the mmio sdw having a parent with a regmap. (it is not how I did things up in my upstream stack, but in downstream the sdw nodes are inside the "macro" codec nodes)
I understand the '#ifdef CONFIG_SLIMBUS'/'dev->parent->bus ==
&slimbus_bus' is ugly, but at least its clear what's going on. Unless you have a better suggestion?
Other suggestion I had in my mind was to use compatible strings to get reg_read, reg_write callbacks + some flags like (if_type) populated. This can help looking up resources correctly.
Thanks,
srini
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap = dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) return -EINVAL; } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
Quoted 29 lines · Srinivas Kandagatla
Quoted 26 lines · Jonathan Marek
Quoted 24 lines · Srinivas Kandagatla
Quoted 13 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>---
drivers/soundwire/Kconfig| 1 -
drivers/soundwire/qcom.c | 5 +++++2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-0@@ -33,7 +33,6 @@ config SOUNDWIRE_INTELQuoted 4 lines
config
SOUNDWIRE_QCOM
tristate "Qualcomm SoundWire Master driver"
- depends on SLIMBUS
depends onSND_SOCWhy not move this to imply SLIMBUS this will give more flexibility!
Quoted 4 lines
Quoted 1 line
If you mean to change it to "select SLIMBUS", I'd prefer not to, because this would increase code size unnecessarily in my kernel.
imply is week select, which means that this driver can be built without SLIMBus selected. So removing reference to
slimbus_busis necessary in this case.
Will change it to "imply", I wasn't aware of this keyword.
Quoted 2 lines
On the other hand, SLIMBus is going to be used sm8250 for BT audio, so this would not be unnecessary. Also mostly these are build as modules, so not sure why kernel size will increase here!
Not everyone uses modules. I am using a config with CONFIG_MODULES=n and only relevant drivers enabled.
Quoted 45 lines
Am not 100% sure if SLIMBus will be kept on all SoCs, but keeping depends or imply in place would enforce or spell out some level of dependency on this.
Quoted 43 lines
Quoted 43 lines
Quoted 8 lines
help
SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +0
-0drivers/soundwire/qcom.c static int qcom_swrm_probe(struct · line 776
Quoted 8 lines
drivers/soundwire/qcom.c +4
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev) if (!ctrl) return -ENOMEM; +#ifdef CONFIG_SLIMBUS if (dev->parent->bus == &slimbus_bus) { +#else + if (false) { +#endif May be you can do bit more cleanup here, which could endup like:
ctrl->regmap=dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) {
res =platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res) {
ctrl->mmio=devm_ioremap_resource(dev, res); if (IS_ERR(ctrl->mmio)) {
dev_err(dev, "No valid mem resource found\n"); returnPTR_ERR(ctrl->mmio);
}
ctrl->reg_read=qcom_swrm_cpu_reg_read;ctrl->reg_write=qcom_swrm_cpu_reg_write; } else {
dev_err(dev, "No valid slim resource found\n"); return-EINVAL;
}
} else {
ctrl->reg_read =qcom_swrm_ahb_reg_read;ctrl->reg_write=qcom_swrm_ahb_reg_write; }
Quoted 9 lines
Quoted 6 lines
Quoted 2 lines
thanks,
sriniI don't think this is better, it feels more obfuscated, and I think its possible we may end up with the mmio sdw having a parent with a regmap. (it is not how I did things up in my upstream stack, but in downstream the sdw nodes are inside the "macro" codec nodes)
I understand the '#ifdef CONFIG_SLIMBUS'/'dev->parent->bus ==
&slimbus_bus' is ugly, but at least its clear what's going on. Unless you have a better suggestion?Other suggestion I had in my mind was to use compatible strings to get
reg_read,reg_writecallbacks + some flags like (if_type) populated. This can help looking up resources correctly.
This is better than the previous suggestion, but is it safe to say that specific versions will always be used with MMIO or slimbus? (I guess the answer is yes, but I want to confirm)
Quoted 14 lines
Thanks,
sriniQuoted 11 lines
Quoted 11 lines
Quoted 11 lines
drivers/soundwire/qcom.c +1
-0ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap = dev_get_regmap(dev->parent, NULL); if (!ctrl->regmap) return -EINVAL; } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Re: [PATCH 4/5] soundwire: qcom: avoid dependency on CONFIG_SLIMBUS
In reply to Jonathan MarekQuoted 13 lines · Jonathan Marek
The driver may be used without slimbus, so don't depend on slimbus.
Signed-off-by Jonathan Marek <[email protected]>--- drivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-)drivers/soundwire/Kconfig +0
-0
drivers/soundwire/Kconfig config SOUNDWIRE_INTEL · line 36
Quoted 4 lines
drivers/soundwire/Kconfig +0
-1@@ -33,7 +33,6 @@ config SOUNDWIRE_INTEL config SOUNDWIRE_QCOM tristate "Qualcomm SoundWire Master driver" - depends on SLIMBUS
I'd suggest:
depends on SLIMBUS || !SLIMBUS #if SLIMBUS=m, this can not be builtin
This would allow building both SLIMBUS and SOUNDWIRE_QCOM as modules
drivers/soundwire/qcom.c static int qcom_swrm_probe(struct platform_device *pdev) · line 772
Quoted 12 lines
drivers/soundwire/Kconfig +0
-0depends on SND_SOC help SoundWire Qualcomm Master driver.drivers/soundwire/qcom.c +1
-0@@ -769,13 +769,18 @@ static int qcom_swrm_probe(struct platform_device *pdev)if (!ctrl)return -ENOMEM ; +#ifdef CONFIG_SLIMBUS
and then #if IS_ENABLED(CONFIG_SLIBMUS) here
Quoted 15 lines
drivers/soundwire/qcom.c +4
-0if (dev->parent->bus == &slimbus_bus) { +#else +if (false) { +#endif ctrl->reg_read = qcom_swrm_ahb_reg_read; ctrl->reg_write = qcom_swrm_ahb_reg_write; ctrl->regmap =dev_get_regmap (dev->parent,NULL );if (!ctrl->regmap)return -EINVAL ; }else { + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); ctrl->reg_read = qcom_swrm_cpu_reg_read;
Signature · 2 lines
With best wishes Dmitry
PATCH 5/5 soundwire: qcom: enable CPU interrupts for mmio devices
In reply to Jonathan MarekThis allows the CPU to receive interrupts.
--- drivers/soundwire/qcom.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/soundwire/qcom.c +7 -0
@@ -34,6 +34,7 @@#define SWRM_INTERRUPT_STATUS_SPECIAL_CMD_ID_FINISHED BIT(10)#define SWRM_INTERRUPT_MASK_ADDR 0x204#define SWRM_INTERRUPT_CLEAR 0x208 +#define SWRM_INTERRUPT_CPU_EN 0x210#define SWRM_CMD_FIFO_WR_CMD 0x300#define SWRM_CMD_FIFO_RD_CMD 0x304#define SWRM_CMD_FIFO_CMD 0x308
@@ -325,6 +326,12 @@ static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) ctrl->reg_write (ctrl,SWRM_COMP_CFG_ADDR ,SWRM_COMP_CFG_IRQ_LEVEL_OR_PULSE_MSK |SWRM_COMP_CFG_ENABLE_MSK ); + +/* enable CPU IRQs */ +if (ctrl->mmio) { + ctrl->reg_write (ctrl,SWRM_INTERRUPT_CPU_EN , +SWRM_INTERRUPT_STATUS_RMSK ); + }return 0 ; }
Signature · 1 line
2.26.1
Thanks Jonathan for the patches,
Quoted 2 lines · Jonathan Marek
This adds initial support for soundwire device on sm8250.
One thing off my list!!
Quoted 1 line
Tested with the "wsa" sdw device, which is simpler than the others.
WSA881x?
did you test both enumeration and streaming?
Are you planing to add any new WSA or WCD codec support for this SoC?
thanks,
srini
Quoted 12 lines
Jonathan Marek (5):
soundwire: qcom: fix abh/ahb typo
soundwire: qcom: add support for mmio soundwire devices
soundwire: qcom: add v1.5.1 compatible
soundwire: qcom: avoid dependency onCONFIG_SLIMBUS
soundwire: qcom: enable CPU interrupts for mmio devicesdrivers/soundwire/Kconfig | 1 - drivers/soundwire/qcom.c | 42 +++++++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-)
Quoted 10 lines · Srinivas Kandagatla
Thanks Jonathan for the patches,
Quoted 2 lines · Jonathan Marek
This adds initial support for soundwire device on sm8250.
One thing off my list!!
Quoted 1 line
Tested with the "wsa" sdw device, which is simpler than the others.
Quoted 9 lines
WSA881x?
did you test both enumeration and streaming?
Are you planing to add any new WSA or WCD codec support for this SoC?
thanks,
srini
Yes, dual WSA881x. I tested streaming, however for the dual WSA881x case I need specific amixer settings and an extra hack to make it work (seems to port config stuff is broken, especially around VISENSE, it tries to use it in the wrong direction I think). For a single WSA881x, it can work without any extra hack.
The SoC has at least 4 codec drivers to add ("wsa macro", "rx macro", "tx macro", "wcd938x"), with what I am doing right now I only need the "wsa macro" codec which I've ported over from downstream. For now I am only looking at sending patches for the required ADSP changes, but may consider doing something with the "wsa macro" driver at some point.
Quoted 12 lines
Quoted 12 lines
Jonathan Marek (5):
soundwire: qcom: fix abh/ahb typo
soundwire: qcom: add support for mmio soundwire devices
soundwire: qcom: add v1.5.1 compatible
soundwire: qcom: avoid dependency onCONFIG_SLIMBUS
soundwire: qcom: enable CPU interrupts for mmio devices
drivers/soundwire/Kconfig| 1 -
drivers/soundwire/qcom.c | 42 +++++++++++++++++++++++++++++++++++----2 files changed, 38 insertions(+), 5 deletions(-)