All of lore.kernel.org
 help / color / mirror / Atom feed
From: Elaine Zhang <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
To: Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	huangtao-TNX95d0MmH7DzftRWevZcw@public.gmane.org,
	xxx-TNX95d0MmH7DzftRWevZcw@public.gmane.org,
	linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	chenjh-TNX95d0MmH7DzftRWevZcw@public.gmane.org,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	mark.rutland-5wv7dgnIgG8@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org
Subject: Re: [PATCH v4 4/7] mfd: rk808: Add RK805 support
Date: Fri, 24 Mar 2017 10:28:25 +0800	[thread overview]
Message-ID: <58D48449.2080705@rock-chips.com> (raw)
In-Reply-To: <20170323122354.3z5tagwue4tjees2@dell>



On 03/23/2017 08:23 PM, Lee Jones wrote:
> On Fri, 17 Mar 2017, Elaine Zhang wrote:
>
>> The RK805 chip is a Power Management IC (PMIC) for multimedia and handheld
>> devices. It contains the following components:
>>
>>      - Regulators
>>      - RTC
>>      - Clocking
>>
>> Both RK808 and RK805 chips are using a similar register map,
>> so we can reuse the RTC and Clocking functionality.
>>
>> Signed-off-by: Elaine Zhang <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
>> ---
>>   drivers/mfd/Kconfig |   4 +-
>>   drivers/mfd/rk808.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 124 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 55ecdfb74d31..b410a348b756 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -892,13 +892,13 @@ config MFD_RC5T583
>>   	  different functionality of the device.
>>
>>   config MFD_RK808
>> -	tristate "Rockchip RK808/RK818 Power Management Chip"
>> +	tristate "Rockchip RK805/RK808/RK818 Power Management Chip"
>>   	depends on I2C && OF
>>   	select MFD_CORE
>>   	select REGMAP_I2C
>>   	select REGMAP_IRQ
>>   	help
>> -	  If you say yes here you get support for the RK808 and RK818
>> +	  If you say yes here you get support for the RK805, RK808 and RK818
>>   	  Power Management chips.
>>   	  This driver provides common support for accessing the device
>>   	  through I2C interface. The device supports multiple sub-devices
>> diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
>> index 3334a2a7f3fb..fdd4449b14b0 100644
>> --- a/drivers/mfd/rk808.c
>> +++ b/drivers/mfd/rk808.c
>> @@ -70,6 +70,14 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	.volatile_reg = rk808_is_volatile_reg,
>>   };
>>
>> +static const struct regmap_config rk805_regmap_config = {
>> +	.reg_bits = 8,
>> +	.val_bits = 8,
>> +	.max_register = RK805_OFF_SOURCE_REG,
>> +	.cache_type = REGCACHE_RBTREE,
>> +	.volatile_reg = rk808_is_volatile_reg,
>> +};
>> +
>>   static const struct regmap_config rk808_regmap_config = {
>>   	.reg_bits = 8,
>>   	.val_bits = 8,
>> @@ -86,6 +94,16 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	}
>>   };
>>
>> +static const struct mfd_cell rk805s[] = {
>> +	{ .name = "rk808-clkout", },
>> +	{ .name = "rk808-regulator", },
>> +	{
>> +		.name = "rk808-rtc",
>> +		.num_resources = ARRAY_SIZE(rtc_resources),
>> +		.resources = &rtc_resources[0],
>> +	},
>> +};
>> +
>>   static const struct mfd_cell rk808s[] = {
>>   	{ .name = "rk808-clkout", },
>>   	{ .name = "rk808-regulator", },
>> @@ -106,6 +124,20 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	},
>>   };
>>
>> +static const struct rk808_reg_data rk805_pre_init_reg[] = {
>> +	{RK805_BUCK1_CONFIG_REG, RK805_BUCK1_2_ILMAX_MASK,
>> +				 RK805_BUCK1_2_ILMAX_4000MA},
>> +	{RK805_BUCK2_CONFIG_REG, RK805_BUCK1_2_ILMAX_MASK,
>> +				 RK805_BUCK1_2_ILMAX_4000MA},
>> +	{RK805_BUCK3_CONFIG_REG, RK805_BUCK3_4_ILMAX_MASK,
>> +				 RK805_BUCK3_ILMAX_3000MA},
>> +	{RK805_BUCK4_CONFIG_REG, RK805_BUCK3_4_ILMAX_MASK,
>> +				 RK805_BUCK4_ILMAX_3500MA},
>> +	{RK805_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_400MA},
>> +	{RK805_GPIO_IO_POL_REG, SLP_SD_MSK, SLEEP_FUN},
>> +	{RK805_THERMAL_REG, TEMP_HOTDIE_MSK, TEMP115C},
>> +};
>> +
>>   static const struct rk808_reg_data rk808_pre_init_reg[] = {
>>   	{ RK808_BUCK3_CONFIG_REG, BUCK_ILMIN_MASK,  BUCK_ILMIN_150MA },
>>   	{ RK808_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK,  BUCK_ILMIN_200MA },
>> @@ -135,6 +167,41 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   						    VB_LO_SEL_3500MV },
>>   };
>>
>> +static const struct regmap_irq rk805_irqs[] = {
>> +	[RK805_IRQ_PWRON_RISE] = {
>> +		.mask = RK805_IRQ_PWRON_RISE_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_VB_LOW] = {
>> +		.mask = RK805_IRQ_VB_LOW_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON] = {
>> +		.mask = RK805_IRQ_PWRON_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON_LP] = {
>> +		.mask = RK805_IRQ_PWRON_LP_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_HOTDIE] = {
>> +		.mask = RK805_IRQ_HOTDIE_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_RTC_ALARM] = {
>> +		.mask = RK805_IRQ_RTC_ALARM_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_RTC_PERIOD] = {
>> +		.mask = RK805_IRQ_RTC_PERIOD_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON_FALL] = {
>> +		.mask = RK805_IRQ_PWRON_FALL_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +};
>> +
>>   static const struct regmap_irq rk808_irqs[] = {
>>   	/* INT_STS */
>>   	[RK808_IRQ_VOUT_LO] = {
>> @@ -247,6 +314,17 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	},
>>   };
>>
>> +static struct regmap_irq_chip rk805_irq_chip = {
>> +	.name = "rk805",
>> +	.irqs = rk805_irqs,
>> +	.num_irqs = ARRAY_SIZE(rk805_irqs),
>> +	.num_regs = 1,
>> +	.status_base = RK805_INT_STS_REG,
>> +	.mask_base = RK805_INT_STS_MSK_REG,
>> +	.ack_base = RK805_INT_STS_REG,
>> +	.init_ack_masked = true,
>> +};
>> +
>>   static const struct regmap_irq_chip rk808_irq_chip = {
>>   	.name = "rk808",
>>   	.irqs = rk808_irqs,
>> @@ -272,6 +350,38 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   };
>>
>>   static struct i2c_client *rk808_i2c_client;
>> +
>> +static void rk805_shutdown_prepare(void)
>> +{
>> +	int ret;
>> +	struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
>
> Nit: Can you switch these two around?
>
>> +	if (!rk808) {
>> +		dev_warn(&rk808_i2c_client->dev,
>> +			 "have no rk808, so do nothing here\n");
>> +		return;
>> +	}
This is follow the rk808 and rk818 device_shutdown func.Check the rk808 
whether NULL.
>
> What's happening here?  Is it possible for rk808 to be NULL?  If so,
> under what circumstances can this happen?  And is that truly an error?
>
>> +	/* close rtc int when power off */
>
> Use proper grammar, "Close RTC".
>
> What is int?  I'm guessing you mean either "interrupt" or "IRQ".
>
>> +	regmap_update_bits(rk808->regmap,
>> +			   RK808_INT_STS_MSK_REG1,
>
> "when power off" should either be "when we power off", "during
> power off", or something of that nature.
>
>> +			   RK805_RTC_PERIOD_INT_MASK |
>> +			   RK805_RTC_ALARM_INT_MASK,
>> +			   RK805_RTC_PERIOD_INT_MASK |
>> +			   RK805_RTC_ALARM_INT_MASK);
>> +	regmap_update_bits(rk808->regmap,
>> +			   RK808_RTC_INT_REG,
>> +			   RK805_INT_ALARM_EN | RK805_INT_TIMER_EN,
>> +			   0);
>> +
>> +	/* pmic sleep shutdown function */
>
> "PMIC"
>
> 'sleep' or 'shutdown' can't be both.
>
> Looks like shutdown to me.
>
I will fixed it in patch V5. Write dev_off directly to shutdown the 
rk805 device.
>> +	ret = regmap_update_bits(rk808->regmap,
>> +				 RK805_GPIO_IO_POL_REG,
>> +				 SLP_SD_MSK, SHUTDOWN_FUN);
>> +	if (ret)
>> +		dev_err(&rk808_i2c_client->dev, "power off error!\n");
>> +}
>> +
>>   static void rk808_device_shutdown(void)
>>   {
>>   	int ret;
>> @@ -309,6 +419,7 @@ static void rk818_device_shutdown(void)
>>   }
>>
>>   static const struct of_device_id rk808_of_match[] = {
>> +	{ .compatible = "rockchip,rk805" },
>>   	{ .compatible = "rockchip,rk808" },
>>   	{ .compatible = "rockchip,rk818" },
>>   	{ },
>> @@ -323,6 +434,7 @@ static int rk808_probe(struct i2c_client *client,
>>   	const struct rk808_reg_data *pre_init_reg;
>>   	const struct mfd_cell *cells;
>>   	void (*pm_pwroff_fn)(void);
>> +	void (*pm_shutdown_prepare_fn)(void);
>>   	int nr_pre_init_regs;
>>   	int nr_cells;
>>   	int pm_off = 0, msb, lsb;
>> @@ -352,6 +464,15 @@ static int rk808_probe(struct i2c_client *client,
>>   	dev_info(&client->dev, "Chip id: 0x%x\n", (unsigned int)rk808->variant);
>>
>>   	switch (rk808->variant) {
>> +	case RK805_ID:
>> +		rk808->regmap_cfg = &rk805_regmap_config;
>> +		rk808->regmap_irq_chip = &rk805_irq_chip;
>> +		pre_init_reg = rk805_pre_init_reg;
>> +		nr_pre_init_regs = ARRAY_SIZE(rk805_pre_init_reg);
>> +		cells = rk805s;
>> +		nr_cells = ARRAY_SIZE(rk805s);
>> +		pm_shutdown_prepare_fn = rk805_shutdown_prepare;
>> +		break;
>>   	case RK808_ID:
>>   		rk808->regmap_cfg = &rk808_regmap_config;
>>   		rk808->regmap_irq_chip = &rk808_irq_chip;
>> @@ -444,6 +565,7 @@ static int rk808_remove(struct i2c_client *client)
>>   }
>>
>>   static const struct i2c_device_id rk808_ids[] = {
>> +	{ "rk805" },
>>   	{ "rk808" },
>>   	{ "rk818" },
>>   	{ },
>

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Elaine Zhang <zhangqing@rock-chips.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: lgirdwood@gmail.com, broonie@kernel.org, huangtao@rock-chips.com,
	xxx@rock-chips.com, linux-rockchip@lists.infradead.org,
	linux-kernel@vger.kernel.org, chenjh@rock-chips.com,
	robh+dt@kernel.org, mark.rutland@arm.com,
	devicetree@vger.kernel.org, w.egorov@phytec.de
Subject: Re: [PATCH v4 4/7] mfd: rk808: Add RK805 support
Date: Fri, 24 Mar 2017 10:28:25 +0800	[thread overview]
Message-ID: <58D48449.2080705@rock-chips.com> (raw)
In-Reply-To: <20170323122354.3z5tagwue4tjees2@dell>



On 03/23/2017 08:23 PM, Lee Jones wrote:
> On Fri, 17 Mar 2017, Elaine Zhang wrote:
>
>> The RK805 chip is a Power Management IC (PMIC) for multimedia and handheld
>> devices. It contains the following components:
>>
>>      - Regulators
>>      - RTC
>>      - Clocking
>>
>> Both RK808 and RK805 chips are using a similar register map,
>> so we can reuse the RTC and Clocking functionality.
>>
>> Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
>> ---
>>   drivers/mfd/Kconfig |   4 +-
>>   drivers/mfd/rk808.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 124 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 55ecdfb74d31..b410a348b756 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -892,13 +892,13 @@ config MFD_RC5T583
>>   	  different functionality of the device.
>>
>>   config MFD_RK808
>> -	tristate "Rockchip RK808/RK818 Power Management Chip"
>> +	tristate "Rockchip RK805/RK808/RK818 Power Management Chip"
>>   	depends on I2C && OF
>>   	select MFD_CORE
>>   	select REGMAP_I2C
>>   	select REGMAP_IRQ
>>   	help
>> -	  If you say yes here you get support for the RK808 and RK818
>> +	  If you say yes here you get support for the RK805, RK808 and RK818
>>   	  Power Management chips.
>>   	  This driver provides common support for accessing the device
>>   	  through I2C interface. The device supports multiple sub-devices
>> diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
>> index 3334a2a7f3fb..fdd4449b14b0 100644
>> --- a/drivers/mfd/rk808.c
>> +++ b/drivers/mfd/rk808.c
>> @@ -70,6 +70,14 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	.volatile_reg = rk808_is_volatile_reg,
>>   };
>>
>> +static const struct regmap_config rk805_regmap_config = {
>> +	.reg_bits = 8,
>> +	.val_bits = 8,
>> +	.max_register = RK805_OFF_SOURCE_REG,
>> +	.cache_type = REGCACHE_RBTREE,
>> +	.volatile_reg = rk808_is_volatile_reg,
>> +};
>> +
>>   static const struct regmap_config rk808_regmap_config = {
>>   	.reg_bits = 8,
>>   	.val_bits = 8,
>> @@ -86,6 +94,16 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	}
>>   };
>>
>> +static const struct mfd_cell rk805s[] = {
>> +	{ .name = "rk808-clkout", },
>> +	{ .name = "rk808-regulator", },
>> +	{
>> +		.name = "rk808-rtc",
>> +		.num_resources = ARRAY_SIZE(rtc_resources),
>> +		.resources = &rtc_resources[0],
>> +	},
>> +};
>> +
>>   static const struct mfd_cell rk808s[] = {
>>   	{ .name = "rk808-clkout", },
>>   	{ .name = "rk808-regulator", },
>> @@ -106,6 +124,20 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	},
>>   };
>>
>> +static const struct rk808_reg_data rk805_pre_init_reg[] = {
>> +	{RK805_BUCK1_CONFIG_REG, RK805_BUCK1_2_ILMAX_MASK,
>> +				 RK805_BUCK1_2_ILMAX_4000MA},
>> +	{RK805_BUCK2_CONFIG_REG, RK805_BUCK1_2_ILMAX_MASK,
>> +				 RK805_BUCK1_2_ILMAX_4000MA},
>> +	{RK805_BUCK3_CONFIG_REG, RK805_BUCK3_4_ILMAX_MASK,
>> +				 RK805_BUCK3_ILMAX_3000MA},
>> +	{RK805_BUCK4_CONFIG_REG, RK805_BUCK3_4_ILMAX_MASK,
>> +				 RK805_BUCK4_ILMAX_3500MA},
>> +	{RK805_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_400MA},
>> +	{RK805_GPIO_IO_POL_REG, SLP_SD_MSK, SLEEP_FUN},
>> +	{RK805_THERMAL_REG, TEMP_HOTDIE_MSK, TEMP115C},
>> +};
>> +
>>   static const struct rk808_reg_data rk808_pre_init_reg[] = {
>>   	{ RK808_BUCK3_CONFIG_REG, BUCK_ILMIN_MASK,  BUCK_ILMIN_150MA },
>>   	{ RK808_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK,  BUCK_ILMIN_200MA },
>> @@ -135,6 +167,41 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   						    VB_LO_SEL_3500MV },
>>   };
>>
>> +static const struct regmap_irq rk805_irqs[] = {
>> +	[RK805_IRQ_PWRON_RISE] = {
>> +		.mask = RK805_IRQ_PWRON_RISE_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_VB_LOW] = {
>> +		.mask = RK805_IRQ_VB_LOW_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON] = {
>> +		.mask = RK805_IRQ_PWRON_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON_LP] = {
>> +		.mask = RK805_IRQ_PWRON_LP_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_HOTDIE] = {
>> +		.mask = RK805_IRQ_HOTDIE_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_RTC_ALARM] = {
>> +		.mask = RK805_IRQ_RTC_ALARM_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_RTC_PERIOD] = {
>> +		.mask = RK805_IRQ_RTC_PERIOD_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +	[RK805_IRQ_PWRON_FALL] = {
>> +		.mask = RK805_IRQ_PWRON_FALL_MSK,
>> +		.reg_offset = 0,
>> +	},
>> +};
>> +
>>   static const struct regmap_irq rk808_irqs[] = {
>>   	/* INT_STS */
>>   	[RK808_IRQ_VOUT_LO] = {
>> @@ -247,6 +314,17 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   	},
>>   };
>>
>> +static struct regmap_irq_chip rk805_irq_chip = {
>> +	.name = "rk805",
>> +	.irqs = rk805_irqs,
>> +	.num_irqs = ARRAY_SIZE(rk805_irqs),
>> +	.num_regs = 1,
>> +	.status_base = RK805_INT_STS_REG,
>> +	.mask_base = RK805_INT_STS_MSK_REG,
>> +	.ack_base = RK805_INT_STS_REG,
>> +	.init_ack_masked = true,
>> +};
>> +
>>   static const struct regmap_irq_chip rk808_irq_chip = {
>>   	.name = "rk808",
>>   	.irqs = rk808_irqs,
>> @@ -272,6 +350,38 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)
>>   };
>>
>>   static struct i2c_client *rk808_i2c_client;
>> +
>> +static void rk805_shutdown_prepare(void)
>> +{
>> +	int ret;
>> +	struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
>
> Nit: Can you switch these two around?
>
>> +	if (!rk808) {
>> +		dev_warn(&rk808_i2c_client->dev,
>> +			 "have no rk808, so do nothing here\n");
>> +		return;
>> +	}
This is follow the rk808 and rk818 device_shutdown func.Check the rk808 
whether NULL.
>
> What's happening here?  Is it possible for rk808 to be NULL?  If so,
> under what circumstances can this happen?  And is that truly an error?
>
>> +	/* close rtc int when power off */
>
> Use proper grammar, "Close RTC".
>
> What is int?  I'm guessing you mean either "interrupt" or "IRQ".
>
>> +	regmap_update_bits(rk808->regmap,
>> +			   RK808_INT_STS_MSK_REG1,
>
> "when power off" should either be "when we power off", "during
> power off", or something of that nature.
>
>> +			   RK805_RTC_PERIOD_INT_MASK |
>> +			   RK805_RTC_ALARM_INT_MASK,
>> +			   RK805_RTC_PERIOD_INT_MASK |
>> +			   RK805_RTC_ALARM_INT_MASK);
>> +	regmap_update_bits(rk808->regmap,
>> +			   RK808_RTC_INT_REG,
>> +			   RK805_INT_ALARM_EN | RK805_INT_TIMER_EN,
>> +			   0);
>> +
>> +	/* pmic sleep shutdown function */
>
> "PMIC"
>
> 'sleep' or 'shutdown' can't be both.
>
> Looks like shutdown to me.
>
I will fixed it in patch V5. Write dev_off directly to shutdown the 
rk805 device.
>> +	ret = regmap_update_bits(rk808->regmap,
>> +				 RK805_GPIO_IO_POL_REG,
>> +				 SLP_SD_MSK, SHUTDOWN_FUN);
>> +	if (ret)
>> +		dev_err(&rk808_i2c_client->dev, "power off error!\n");
>> +}
>> +
>>   static void rk808_device_shutdown(void)
>>   {
>>   	int ret;
>> @@ -309,6 +419,7 @@ static void rk818_device_shutdown(void)
>>   }
>>
>>   static const struct of_device_id rk808_of_match[] = {
>> +	{ .compatible = "rockchip,rk805" },
>>   	{ .compatible = "rockchip,rk808" },
>>   	{ .compatible = "rockchip,rk818" },
>>   	{ },
>> @@ -323,6 +434,7 @@ static int rk808_probe(struct i2c_client *client,
>>   	const struct rk808_reg_data *pre_init_reg;
>>   	const struct mfd_cell *cells;
>>   	void (*pm_pwroff_fn)(void);
>> +	void (*pm_shutdown_prepare_fn)(void);
>>   	int nr_pre_init_regs;
>>   	int nr_cells;
>>   	int pm_off = 0, msb, lsb;
>> @@ -352,6 +464,15 @@ static int rk808_probe(struct i2c_client *client,
>>   	dev_info(&client->dev, "Chip id: 0x%x\n", (unsigned int)rk808->variant);
>>
>>   	switch (rk808->variant) {
>> +	case RK805_ID:
>> +		rk808->regmap_cfg = &rk805_regmap_config;
>> +		rk808->regmap_irq_chip = &rk805_irq_chip;
>> +		pre_init_reg = rk805_pre_init_reg;
>> +		nr_pre_init_regs = ARRAY_SIZE(rk805_pre_init_reg);
>> +		cells = rk805s;
>> +		nr_cells = ARRAY_SIZE(rk805s);
>> +		pm_shutdown_prepare_fn = rk805_shutdown_prepare;
>> +		break;
>>   	case RK808_ID:
>>   		rk808->regmap_cfg = &rk808_regmap_config;
>>   		rk808->regmap_irq_chip = &rk808_irq_chip;
>> @@ -444,6 +565,7 @@ static int rk808_remove(struct i2c_client *client)
>>   }
>>
>>   static const struct i2c_device_id rk808_ids[] = {
>> +	{ "rk805" },
>>   	{ "rk808" },
>>   	{ "rk818" },
>>   	{ },
>

  reply	other threads:[~2017-03-24  2:28 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-17  7:06 [PATCH v4 0/7] rk808: Add RK805 support Elaine Zhang
     [not found] ` <1489734377-1716-1-git-send-email-zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-03-17  7:06   ` [PATCH v4 1/7] mfd: rk808: fix up the chip id get failed Elaine Zhang
2017-03-17  7:06     ` Elaine Zhang
     [not found]     ` <1489734377-1716-2-git-send-email-zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-03-23 12:14       ` Lee Jones
2017-03-23 12:14         ` Lee Jones
2017-03-17  7:06   ` [PATCH v4 2/7] mfd: rk808: add rk805 regs addr and ID Elaine Zhang
2017-03-17  7:06     ` Elaine Zhang
     [not found]     ` <1489734377-1716-3-git-send-email-zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-03-23 12:15       ` Lee Jones
2017-03-23 12:15         ` Lee Jones
2017-03-24  2:22         ` Elaine Zhang
2017-03-24  2:22           ` Elaine Zhang
2017-03-17  7:06   ` [PATCH v4 3/7] regulator: rk808: Add regulator driver for RK805 Elaine Zhang
2017-03-17  7:06     ` Elaine Zhang
2017-03-17  7:06   ` [PATCH v4 4/7] mfd: rk808: Add RK805 support Elaine Zhang
2017-03-17  7:06     ` Elaine Zhang
2017-03-20  0:19     ` kbuild test robot
2017-03-20  0:19       ` kbuild test robot
     [not found]     ` <1489734377-1716-5-git-send-email-zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-03-23 12:23       ` Lee Jones
2017-03-23 12:23         ` Lee Jones
2017-03-24  2:28         ` Elaine Zhang [this message]
2017-03-24  2:28           ` Elaine Zhang
2017-03-17  7:08   ` [PATCH v4 5/7] clk: Kconfig: Name RK805 in Kconfig for COMMON_CLK_RK808 Elaine Zhang
2017-03-17  7:08     ` Elaine Zhang
2017-03-17  7:08   ` [PATCH v4 6/7] rtc: Kconfig: Name RK805 in Kconfig for RTC_DRV_RK808 Elaine Zhang
2017-03-17  7:08     ` Elaine Zhang
2017-03-17  7:08   ` [PATCH v4 7/7] mfd: dt-bindings: Add RK805 device tree bindings document Elaine Zhang
2017-03-17  7:08     ` Elaine Zhang
     [not found]     ` <1489734525-23310-1-git-send-email-zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-03-23 12:25       ` Lee Jones
2017-03-23 12:25         ` Lee Jones
2017-03-24  2:38       ` Rob Herring
2017-03-24  2:38         ` Rob Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58D48449.2080705@rock-chips.com \
    --to=zhangqing-tnx95d0mmh7dzftrwevzcw@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=chenjh-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=huangtao-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org \
    --cc=xxx-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.