Commit d0c7347d authored by Hsin-Hsiung Wang's avatar Hsin-Hsiung Wang Committed by Lee Jones
Browse files

mfd: mt6397: Trim probe function to support different chips more cleanly



Add new struct members for mfd-cells and irq initial function, so we can
call devm_mfd_add_devices() only once.

Signed-off-by: default avatarHsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 4e2e7cfe
Loading
Loading
Loading
Loading
+14 −21
Original line number Diff line number Diff line
@@ -103,22 +103,31 @@ static const struct mfd_cell mt6397_devs[] = {
struct chip_data {
	u32 cid_addr;
	u32 cid_shift;
	const struct mfd_cell *cells;
	int cell_size;
	int (*irq_init)(struct mt6397_chip *chip);
};

static const struct chip_data mt6323_core = {
	.cid_addr = MT6323_CID,
	.cid_shift = 0,
	.cells = mt6323_devs,
	.cell_size = ARRAY_SIZE(mt6323_devs),
	.irq_init = mt6397_irq_init,
};

static const struct chip_data mt6397_core = {
	.cid_addr = MT6397_CID,
	.cid_shift = 0,
	.cells = mt6397_devs,
	.cell_size = ARRAY_SIZE(mt6397_devs),
	.irq_init = mt6397_irq_init,
};

static int mt6397_probe(struct platform_device *pdev)
{
	int ret;
	unsigned int id;
	unsigned int id = 0;
	struct mt6397_chip *pmic;
	const struct chip_data *pmic_core;

@@ -154,29 +163,13 @@ static int mt6397_probe(struct platform_device *pdev)
	if (pmic->irq <= 0)
		return pmic->irq;

	ret = mt6397_irq_init(pmic);
	ret = pmic_core->irq_init(pmic);
	if (ret)
		return ret;

	switch (pmic->chip_id) {
	case MT6323_CHIP_ID:
	ret = devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE,
					   mt6323_devs, ARRAY_SIZE(mt6323_devs),
				   pmic_core->cells, pmic_core->cell_size,
				   NULL, 0, pmic->irq_domain);
		break;

	case MT6391_CHIP_ID:
	case MT6397_CHIP_ID:
		ret = devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE,
					   mt6397_devs, ARRAY_SIZE(mt6397_devs),
					   NULL, 0, pmic->irq_domain);
		break;

	default:
		dev_err(&pdev->dev, "unsupported chip: %d\n", pmic->chip_id);
		return -ENODEV;
	}

	if (ret) {
		irq_domain_remove(pmic->irq_domain);
		dev_err(&pdev->dev, "failed to add child devices: %d\n", ret);