Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e80df40 authored by Abhijeet Dharmapurikar's avatar Abhijeet Dharmapurikar Committed by David Collins
Browse files

qpnp: revid: fix the use of TYPE and SUBTYPE



The TYPE for a PMIC chip is always 0x51. There is no need to define it
for each PMIC chip.

Also the SUBTYPE of a PMIC chip doesn't change with versions. Have a
single definition of the SUBTYPE per PMIC chip.

Also, the driver uses integer indexes to get to the pmic name, instead
use the SUBTYPE to index in the pmic names array.

Change-Id: Ie1c43f3db0d4a395307253aad347ad93624a1203
CRs-Fixed: 986619
Signed-off-by: default avatarAbhijeet Dharmapurikar <adharmap@codeaurora.org>
parent e551e7a6
Loading
Loading
Loading
Loading
+15 −30
Original line number Diff line number Diff line
@@ -1674,103 +1674,88 @@ int qpnp_adc_get_revid_version(struct device *dev)
		(revid_data->rev2 == PM8941_V3P1_REV2) &&
		(revid_data->rev3 == PM8941_V3P1_REV3) &&
		(revid_data->rev4 == PM8941_V3P1_REV4) &&
		(revid_data->pmic_type == PM8941_V3P1_TYPE) &&
		(revid_data->pmic_subtype == PM8941_V3P1_SUBTYPE))
		(revid_data->pmic_subtype == PM8941_SUBTYPE))
			return QPNP_REV_ID_8941_3_1;
	else if ((revid_data->rev1 == PM8941_V3P0_REV1) &&
		(revid_data->rev2 == PM8941_V3P0_REV2) &&
		(revid_data->rev3 == PM8941_V3P0_REV3) &&
		(revid_data->rev4 == PM8941_V3P0_REV4) &&
		(revid_data->pmic_type == PM8941_V3P0_TYPE) &&
		(revid_data->pmic_subtype == PM8941_V3P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8941_SUBTYPE))
			return QPNP_REV_ID_8941_3_0;
	else if ((revid_data->rev1 == PM8941_V2P0_REV1) &&
		(revid_data->rev2 == PM8941_V2P0_REV2) &&
		(revid_data->rev3 == PM8941_V2P0_REV3) &&
		(revid_data->rev4 == PM8941_V2P0_REV4) &&
		(revid_data->pmic_type == PM8941_V2P0_TYPE) &&
		(revid_data->pmic_subtype == PM8941_V2P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8941_SUBTYPE))
			return QPNP_REV_ID_8941_2_0;
	else if ((revid_data->rev1 == PM8226_V2P2_REV1) &&
		(revid_data->rev2 == PM8226_V2P2_REV2) &&
		(revid_data->rev3 == PM8226_V2P2_REV3) &&
		(revid_data->rev4 == PM8226_V2P2_REV4) &&
		(revid_data->pmic_type == PM8226_V2P2_TYPE) &&
		(revid_data->pmic_subtype == PM8226_V2P2_SUBTYPE))
		(revid_data->pmic_subtype == PM8226_SUBTYPE))
			return QPNP_REV_ID_8026_2_2;
	else if ((revid_data->rev1 == PM8226_V2P1_REV1) &&
		(revid_data->rev2 == PM8226_V2P1_REV2) &&
		(revid_data->rev3 == PM8226_V2P1_REV3) &&
		(revid_data->rev4 == PM8226_V2P1_REV4) &&
		(revid_data->pmic_type == PM8226_V2P1_TYPE) &&
		(revid_data->pmic_subtype == PM8226_V2P1_SUBTYPE))
		(revid_data->pmic_subtype == PM8226_SUBTYPE))
			return QPNP_REV_ID_8026_2_1;
	else if ((revid_data->rev1 == PM8226_V2P0_REV1) &&
		(revid_data->rev2 == PM8226_V2P0_REV2) &&
		(revid_data->rev3 == PM8226_V2P0_REV3) &&
		(revid_data->rev4 == PM8226_V2P0_REV4) &&
		(revid_data->pmic_type == PM8226_V2P0_TYPE) &&
		(revid_data->pmic_subtype == PM8226_V2P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8226_SUBTYPE))
			return QPNP_REV_ID_8026_2_0;
	else if ((revid_data->rev1 == PM8226_V1P0_REV1) &&
		(revid_data->rev2 == PM8226_V1P0_REV2) &&
		(revid_data->rev3 == PM8226_V1P0_REV3) &&
		(revid_data->rev4 == PM8226_V1P0_REV4) &&
		(revid_data->pmic_type == PM8226_V1P0_TYPE) &&
		(revid_data->pmic_subtype == PM8226_V1P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8226_SUBTYPE))
			return QPNP_REV_ID_8026_1_0;
	else if ((revid_data->rev1 == PM8110_V1P0_REV1) &&
		(revid_data->rev2 == PM8110_V1P0_REV2) &&
		(revid_data->rev3 == PM8110_V1P0_REV3) &&
		(revid_data->rev4 == PM8110_V1P0_REV4) &&
		(revid_data->pmic_type == PM8110_V1P0_TYPE) &&
		(revid_data->pmic_subtype == PM8110_V1P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8110_SUBTYPE))
			return QPNP_REV_ID_8110_1_0;
	else if ((revid_data->rev1 == PM8110_V2P0_REV1) &&
		(revid_data->rev2 == PM8110_V2P0_REV2) &&
		(revid_data->rev3 == PM8110_V2P0_REV3) &&
		(revid_data->rev4 == PM8110_V2P0_REV4) &&
		(revid_data->pmic_type == PM8110_V2P0_TYPE) &&
		(revid_data->pmic_subtype == PM8110_V2P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8110_SUBTYPE))
			return QPNP_REV_ID_8110_2_0;
	else if ((revid_data->rev1 == PM8916_V1P0_REV1) &&
		(revid_data->rev2 == PM8916_V1P0_REV2) &&
		(revid_data->rev3 == PM8916_V1P0_REV3) &&
		(revid_data->rev4 == PM8916_V1P0_REV4) &&
		(revid_data->pmic_type == PM8916_V1P0_TYPE) &&
		(revid_data->pmic_subtype == PM8916_V1P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8916_SUBTYPE))
			return QPNP_REV_ID_8916_1_0;
	else if ((revid_data->rev1 == PM8916_V1P1_REV1) &&
		(revid_data->rev2 == PM8916_V1P1_REV2) &&
		(revid_data->rev3 == PM8916_V1P1_REV3) &&
		(revid_data->rev4 == PM8916_V1P1_REV4) &&
		(revid_data->pmic_type == PM8916_V1P1_TYPE) &&
		(revid_data->pmic_subtype == PM8916_V1P1_SUBTYPE))
		(revid_data->pmic_subtype == PM8916_SUBTYPE))
			return QPNP_REV_ID_8916_1_1;
	else if ((revid_data->rev1 == PM8916_V2P0_REV1) &&
		(revid_data->rev2 == PM8916_V2P0_REV2) &&
		(revid_data->rev3 == PM8916_V2P0_REV3) &&
		(revid_data->rev4 == PM8916_V2P0_REV4) &&
		(revid_data->pmic_type == PM8916_V2P0_TYPE) &&
		(revid_data->pmic_subtype == PM8916_V2P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8916_SUBTYPE))
			return QPNP_REV_ID_8916_2_0;
	else if ((revid_data->rev1 == PM8909_V1P0_REV1) &&
		(revid_data->rev2 == PM8909_V1P0_REV2) &&
		(revid_data->rev3 == PM8909_V1P0_REV3) &&
		(revid_data->rev4 == PM8909_V1P0_REV4) &&
		(revid_data->pmic_type == PM8909_V1P0_TYPE) &&
		(revid_data->pmic_subtype == PM8909_V1P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8909_SUBTYPE))
			return QPNP_REV_ID_8909_1_0;
	else if ((revid_data->rev1 == PM8909_V1P1_REV1) &&
		(revid_data->rev2 == PM8909_V1P1_REV2) &&
		(revid_data->rev3 == PM8909_V1P1_REV3) &&
		(revid_data->rev4 == PM8909_V1P1_REV4) &&
		(revid_data->pmic_type == PM8909_V1P1_TYPE) &&
		(revid_data->pmic_subtype == PM8909_V1P1_SUBTYPE))
		(revid_data->pmic_subtype == PM8909_SUBTYPE))
			return QPNP_REV_ID_8909_1_1;
	else if ((revid_data->rev4 == PM8950_V1P0_REV4) &&
		(revid_data->pmic_type == PM8950_V1P0_TYPE) &&
		(revid_data->pmic_subtype == PM8950_V1P0_SUBTYPE))
		(revid_data->pmic_subtype == PM8950_SUBTYPE))
			return QPNP_REV_ID_PM8950_1_0;
	else
		return -EINVAL;
+0 −1
Original line number Diff line number Diff line
@@ -116,7 +116,6 @@
#define	FLASH_LED_MODULE_CTRL_DEFAULT				0x60
#define	FLASH_LED_CURRENT_READING_DELAY_MIN			5000
#define	FLASH_LED_CURRENT_READING_DELAY_MAX			5001
#define PMI8996_SUBTYPE						19
#define	FLASH_LED_OPEN_FAULT_DETECTED				0xC

#define FLASH_UNLOCK_SECURE					0xA5
+25 −23
Original line number Diff line number Diff line
/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -28,28 +28,30 @@
#define QPNP_REVID_DEV_NAME "qcom,qpnp-revid"

static const char *const pmic_names[] = {
		"Unknown PMIC",
		"PM8941",
		"PM8841",
		"PM8019",
		"PM8226",
		"PM8110",
		"PMA8084",
		"PMI8962",
		"PMD9635",
		"PM8994",
		"PMI8994",
		"PM8916",
		"PM8004",
		"PM8909",
		"PM2433",
		"PMD9655",
		"PM8950",
		"PMI8950",
		"PMK8001",
		"PMI8996",
	[25] =	"PM8937",
	[55] =	"PMI8937",
	[0] =	"Unknown PMIC",
	[PM8941_SUBTYPE] = "PM8941",
	[PM8841_SUBTYPE] = "PM8841",
	[PM8019_SUBTYPE] = "PM8019",
	[PM8226_SUBTYPE] = "PM8226",
	[PM8110_SUBTYPE] = "PM8110",
	[PMA8084_SUBTYPE] = "PMA8084",
	[PMI8962_SUBTYPE] = "PMI8962",
	[PMD9635_SUBTYPE] = "PMD9635",
	[PM8994_SUBTYPE] = "PM8994",
	[PMI8994_SUBTYPE] = "PMI8994",
	[PM8916_SUBTYPE] = "PM8916",
	[PM8004_SUBTYPE] = "PM8004",
	[PM8909_SUBTYPE] = "PM8909",
	[PM2433_SUBTYPE] = "PM2433",
	[PMD9655_SUBTYPE] = "PMD9655",
	[PM8950_SUBTYPE] = "PM8950",
	[PMI8950_SUBTYPE] = "PMI8950",
	[PMK8001_SUBTYPE] = "PMK8001",
	[PMI8996_SUBTYPE] = "PMI8996",
	[PMCOBALT_SUBTYPE] = "PMCOBALT",
	[PMICOBALT_SUBTYPE] = "PMICOBALT",
	[PM8937_SUBTYPE] = "PM8937",
	[PMI8937_SUBTYPE] = "PMI8937",
};

struct revid_chip {
+2 −2
Original line number Diff line number Diff line
/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -3793,7 +3793,7 @@ static int qpnp_vm_bms_probe(struct spmi_device *spmi)
		pr_err("revid error rc = %ld\n", PTR_ERR(chip->revid_data));
		return -EINVAL;
	}
	if ((chip->revid_data->pmic_subtype == PM8916_V2P0_SUBTYPE) &&
	if ((chip->revid_data->pmic_subtype == PM8916_SUBTYPE) &&
				chip->revid_data->rev4 == PM8916_V2P0_REV4)
		chip->workaround_flag |= WRKARND_PON_OCV_COMP;

+98 −69
Original line number Diff line number Diff line
/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -13,146 +13,175 @@
#ifndef __QPNP_REVID
#define __QPNP_REVID

#define PM8226_V2P2_REV1	0x00
#define PM8226_V2P2_REV2	0x00
#define PM8226_V2P2_REV3	0x02
#define PM8226_V2P2_REV4	0x02
#define PM8226_V2P2_TYPE	0x51
#define PM8226_V2P2_SUBTYPE	0x04
/* Common TYPE for all PMICs */
#define PMIC_TYPE		0x51

#define PM8226_V2P1_REV1	0x00
#define PM8226_V2P1_REV2	0x00
#define PM8226_V2P1_REV3	0x01
#define PM8226_V2P1_REV4	0x02
#define PM8226_V2P1_TYPE	0x51
#define PM8226_V2P1_SUBTYPE	0x04

#define PM8226_V2P0_REV1	0x00
#define PM8226_V2P0_REV2	0x00
#define PM8226_V2P0_REV3	0x00
#define PM8226_V2P0_REV4	0x02
#define PM8226_V2P0_TYPE	0x51
#define PM8226_V2P0_SUBTYPE	0x04

#define PM8226_V1P0_REV1	0x00
#define PM8226_V1P0_REV2	0x00
#define PM8226_V1P0_REV3	0x00
#define PM8226_V1P0_REV4	0x00
#define PM8226_V1P0_TYPE	0x51
#define PM8226_V1P0_SUBTYPE	0x04
/* PM8994 */
#define PM8941_SUBTYPE		0x01

#define PM8941_V1P0_REV1	0x00
#define PM8941_V1P0_REV2	0x00
#define PM8941_V1P0_REV3	0x00
#define PM8941_V1P0_REV4	0x01
#define PM8941_V1P0_TYPE	0x51
#define PM8941_V1P0_SUBTYPE	0x01

#define PM8941_V2P0_REV1	0x00
#define PM8941_V2P0_REV2	0x00
#define PM8941_V2P0_REV3	0x00
#define PM8941_V2P0_REV4	0x01
#define PM8941_V2P0_TYPE	0x51
#define PM8941_V2P0_SUBTYPE	0x01

#define PM8941_V3P0_REV1	0x00
#define PM8941_V3P0_REV2	0x00
#define PM8941_V3P0_REV3	0x00
#define PM8941_V3P0_REV4	0x03
#define PM8941_V3P0_TYPE	0x51
#define PM8941_V3P0_SUBTYPE	0x01

#define PM8941_V3P1_REV1	0x00
#define PM8941_V3P1_REV2	0x00
#define PM8941_V3P1_REV3	0x01
#define PM8941_V3P1_REV4	0x03
#define PM8941_V3P1_TYPE	0x51
#define PM8941_V3P1_SUBTYPE	0x01

/* PM8841 */
#define PM8841_SUBTYPE		0x02

/* PM8019 */
#define PM8019_SUBTYPE		0x03

/* PM8226 */
#define PM8226_SUBTYPE		0x04

#define PM8226_V2P2_REV1	0x00
#define PM8226_V2P2_REV2	0x00
#define PM8226_V2P2_REV3	0x02
#define PM8226_V2P2_REV4	0x02

#define PM8226_V2P1_REV1	0x00
#define PM8226_V2P1_REV2	0x00
#define PM8226_V2P1_REV3	0x01
#define PM8226_V2P1_REV4	0x02

#define PM8226_V2P0_REV1	0x00
#define PM8226_V2P0_REV2	0x00
#define PM8226_V2P0_REV3	0x00
#define PM8226_V2P0_REV4	0x02

#define PM8226_V1P0_REV1	0x00
#define PM8226_V1P0_REV2	0x00
#define PM8226_V1P0_REV3	0x00
#define PM8226_V1P0_REV4	0x00

/* PM8110 */
#define PM8110_SUBTYPE		0x05

#define PM8110_V1P0_REV1	0x00
#define PM8110_V1P0_REV2	0x00
#define PM8110_V1P0_REV3	0x00
#define PM8110_V1P0_REV4	0x01
#define PM8110_V1P0_TYPE	0x51
#define PM8110_V1P0_SUBTYPE	0x05

#define PM8110_V1P1_REV1	0x00
#define PM8110_V1P1_REV2	0x01
#define PM8110_V1P1_REV3	0x00
#define PM8110_V1P1_REV4	0x01
#define PM8110_V1P1_TYPE	0x51
#define PM8110_V1P1_SUBTYPE	0x05

#define PM8110_V1P3_REV1	0x00
#define PM8110_V1P3_REV2	0x03
#define PM8110_V1P3_REV3	0x00
#define PM8110_V1P3_REV4	0x01
#define PM8110_V1P3_TYPE	0x51
#define PM8110_V1P3_SUBTYPE	0x05

#define PM8110_V2P0_REV1	0x00
#define PM8110_V2P0_REV2	0x00
#define PM8110_V2P0_REV3	0x00
#define PM8110_V2P0_REV4	0x02
#define PM8110_V2P0_TYPE	0x51
#define PM8110_V2P0_SUBTYPE	0x05

/* PMA8084 */
#define PMA8084_SUBTYPE		0x06

/* PMI8962 */
#define PMI8962_SUBTYPE		0x07

/* PMD9635 */
#define PMD9635_SUBTYPE		0x08
/* PM8994 */
#define PM8994_SUBTYPE		0x09

/* PMI8994 */
#define PMI8994_TYPE		0x51
#define PMI8994_SUBTYPE		0x0A

#define PMI8994_V1P0_REV1	0x00
#define PMI8994_V1P0_REV2	0x00
#define PMI8994_V1P0_REV3	0x00
#define PMI8994_V1P0_REV4	0x01

#define PMI8994_V2P0_REV1	0x00
#define PMI8994_V2P0_REV2	0x00
#define PMI8994_V2P0_REV3	0x00
#define PMI8994_V2P0_REV4	0x02

/* PM8916 */
#define PM8916_SUBTYPE		0x0B

#define PM8916_V1P0_REV1	0x00
#define PM8916_V1P0_REV2	0x00
#define PM8916_V1P0_REV3	0x00
#define PM8916_V1P0_REV4	0x01
#define PM8916_V1P0_TYPE	0x51
#define PM8916_V1P0_SUBTYPE	0x0B

#define PM8916_V1P1_REV1	0x00
#define PM8916_V1P1_REV2	0x00
#define PM8916_V1P1_REV3	0x01
#define PM8916_V1P1_REV4	0x01
#define PM8916_V1P1_TYPE	0x51
#define PM8916_V1P1_SUBTYPE	0x0B

#define PM8916_V2P0_REV1	0x00
#define PM8916_V2P0_REV2	0x00
#define PM8916_V2P0_REV3	0x00
#define PM8916_V2P0_REV4	0x02
#define PM8916_V2P0_TYPE	0x51
#define PM8916_V2P0_SUBTYPE	0x0B

/* PM8004 */
#define PM8004_SUBTYPE		0x0C

/* PM8909 */
#define PM8909_SUBTYPE		0x0D

#define PM8909_V1P0_REV1	0x00
#define PM8909_V1P0_REV2	0x00
#define PM8909_V1P0_REV3	0x00
#define PM8909_V1P0_REV4	0x01
#define PM8909_V1P0_TYPE	0x51
#define PM8909_V1P0_SUBTYPE	0x0D

#define PM8909_V1P1_REV1	0x00
#define PM8909_V1P1_REV2	0x00
#define PM8909_V1P1_REV3	0x01
#define PM8909_V1P1_REV4	0x01
#define PM8909_V1P1_TYPE	0x51
#define PM8909_V1P1_SUBTYPE	0x0D

#define PMI8994_V1P0_REV1	0x00
#define PMI8994_V1P0_REV2	0x00
#define PMI8994_V1P0_REV3	0x00
#define PMI8994_V1P0_REV4	0x01
#define PMI8994_V1P0_TYPE	0x51
#define PMI8994_V1P0_SUBTYPE	0x0A
/* PM2433 */
#define PM2433_SUBTYPE		0x0E

#define PMI8994_V2P0_REV1	0x00
#define PMI8994_V2P0_REV2	0x00
#define PMI8994_V2P0_REV3	0x00
#define PMI8994_V2P0_REV4	0x02
#define PMI8994_V2P0_TYPE	0x51
#define PMI8994_V2P0_SUBTYPE	0x0A
/* PMD9655 */
#define PMD9655_SUBTYPE		0x0F

/* PM8950 */
#define PM8950_SUBTYPE		0x10
#define PM8950_V1P0_REV4	0x01
#define PM8950_V1P0_TYPE	0x51
#define PM8950_V1P0_SUBTYPE	0x10

#define PM8950_V2P0_REV4	0x02
#define PM8950_V2P0_TYPE	0x51
#define PM8950_V2P0_SUBTYPE	0x10

/* PMI8950 */
#define PMI8950_SUBTYPE		0x11

/* PMK8001 */
#define PMK8001_SUBTYPE		0x12

/* PMI8996 */
#define PMI8996_SUBTYPE		0x13

/* PMCOBALT */
#define PMCOBALT_SUBTYPE	0x14

/* PMICOBALT */
#define PMICOBALT_SUBTYPE	0x15

/* PM8937 */
#define PM8937_SUBTYPE		0x19

/* PMI8937 */
#define PMI8937_SUBTYPE		0x37

struct pmic_revid_data {
	u8		rev1;