#include <linux/tpm.h>
 #include <linux/platform_data/st33zp24.h>
 
+#include "../tpm.h"
 #include "st33zp24.h"
 
 #define TPM_DUMMY_BYTE                 0xAA
 
 static int st33zp24_i2c_acpi_request_resources(struct i2c_client *client)
 {
-       struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
+       struct tpm_chip *chip = i2c_get_clientdata(client);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
        struct gpio_desc *gpiod_lpcpd;
        struct device *dev = &client->dev;
 
 
 static int st33zp24_i2c_of_request_resources(struct i2c_client *client)
 {
-       struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
+       struct tpm_chip *chip = i2c_get_clientdata(client);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
        struct device_node *pp;
        int gpio;
        int ret;
 
 static int st33zp24_i2c_request_resources(struct i2c_client *client)
 {
+       struct tpm_chip *chip = i2c_get_clientdata(client);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
        struct st33zp24_platform_data *pdata;
-       struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
        int ret;
 
        pdata = client->dev.platform_data;
 
        phy->client = client;
 
-       i2c_set_clientdata(client, phy);
-
        pdata = client->dev.platform_data;
        if (!pdata && client->dev.of_node) {
                ret = st33zp24_i2c_of_request_resources(client);
 
 #include <linux/tpm.h>
 #include <linux/platform_data/st33zp24.h>
 
+#include "../tpm.h"
 #include "st33zp24.h"
 
 #define TPM_DATA_FIFO           0x24
 
 static int st33zp24_spi_acpi_request_resources(struct spi_device *spi_dev)
 {
-       struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
+       struct tpm_chip *chip = spi_get_drvdata(spi_dev);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
        struct gpio_desc *gpiod_lpcpd;
        struct device *dev = &spi_dev->dev;
 
 
 static int st33zp24_spi_of_request_resources(struct spi_device *spi_dev)
 {
-       struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
+       struct tpm_chip *chip = spi_get_drvdata(spi_dev);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
        struct device_node *pp;
        int gpio;
        int ret;
 
 static int st33zp24_spi_request_resources(struct spi_device *dev)
 {
-       struct st33zp24_spi_phy *phy = spi_get_drvdata(dev);
+       struct tpm_chip *chip = spi_get_drvdata(dev);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+       struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
        struct st33zp24_platform_data *pdata;
        int ret;
 
 
        phy->spi_device = dev;
 
-       spi_set_drvdata(dev, phy);
-
        pdata = dev->dev.platform_data;
        if (!pdata && dev->dev.of_node) {
                ret = st33zp24_spi_of_request_resources(dev);
 
  */
 static void st33zp24_cancel(struct tpm_chip *chip)
 {
-       struct st33zp24_dev *tpm_dev;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        u8 data;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        data = TPM_STS_COMMAND_READY;
        tpm_dev->ops->send(tpm_dev->phy_id, TPM_STS, &data, 1);
 } /* st33zp24_cancel() */
  */
 static u8 st33zp24_status(struct tpm_chip *chip)
 {
-       struct st33zp24_dev *tpm_dev;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        u8 data;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        tpm_dev->ops->recv(tpm_dev->phy_id, TPM_STS, &data, 1);
        return data;
 } /* st33zp24_status() */
  */
 static int check_locality(struct tpm_chip *chip)
 {
-       struct st33zp24_dev *tpm_dev;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        u8 data;
        u8 status;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        status = tpm_dev->ops->recv(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
        if (status && (data &
                (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
  */
 static int request_locality(struct tpm_chip *chip)
 {
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        unsigned long stop;
        long ret;
-       struct st33zp24_dev *tpm_dev;
        u8 data;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        if (check_locality(chip) == tpm_dev->locality)
                return tpm_dev->locality;
 
  */
 static void release_locality(struct tpm_chip *chip)
 {
-       struct st33zp24_dev *tpm_dev;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        u8 data;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
        data = TPM_ACCESS_ACTIVE_LOCALITY;
 
        tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
  */
 static int get_burstcount(struct tpm_chip *chip)
 {
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        unsigned long stop;
        int burstcnt, status;
        u8 temp;
-       struct st33zp24_dev *tpm_dev;
-
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
        stop = jiffies + chip->timeout_d;
        do {
 static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
                        wait_queue_head_t *queue, bool check_cancel)
 {
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        unsigned long stop;
        int ret = 0;
        bool canceled = false;
        bool condition;
        u32 cur_intrs;
        u8 status;
-       struct st33zp24_dev *tpm_dev;
-
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
        /* check current status */
        status = st33zp24_status(chip);
  */
 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 {
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        int size = 0, burstcnt, len, ret;
-       struct st33zp24_dev *tpm_dev;
-
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
        while (size < count &&
               wait_for_stat(chip,
 static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
 {
        struct tpm_chip *chip = dev_id;
-       struct st33zp24_dev *tpm_dev;
-
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 
        tpm_dev->intrs++;
        wake_up_interruptible(&tpm_dev->read_queue);
 static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
                         size_t len)
 {
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        u32 status, i, size, ordinal;
        int burstcnt = 0;
        int ret;
        u8 data;
-       struct st33zp24_dev *tpm_dev;
 
        if (!chip)
                return -EBUSY;
        if (len < TPM_HEADER_SIZE)
                return -EBUSY;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        ret = request_locality(chip);
        if (ret < 0)
                return ret;
        if (!tpm_dev)
                return -ENOMEM;
 
-       TPM_VPRIV(chip) = tpm_dev;
        tpm_dev->phy_id = phy_id;
        tpm_dev->ops = ops;
+       dev_set_drvdata(&chip->dev, tpm_dev);
 
        chip->timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
        chip->timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
 int st33zp24_pm_suspend(struct device *dev)
 {
        struct tpm_chip *chip = dev_get_drvdata(dev);
-       struct st33zp24_dev *tpm_dev;
-       int ret = 0;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
+       int ret = 0;
 
        if (gpio_is_valid(tpm_dev->io_lpcpd))
                gpio_set_value(tpm_dev->io_lpcpd, 0);
 int st33zp24_pm_resume(struct device *dev)
 {
        struct tpm_chip *chip = dev_get_drvdata(dev);
-       struct st33zp24_dev *tpm_dev;
+       struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
        int ret = 0;
 
-       tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
        if (gpio_is_valid(tpm_dev->io_lpcpd)) {
                gpio_set_value(tpm_dev->io_lpcpd, 1);
                ret = wait_for_stat(chip,
 
        TPM2_SU_STATE   = 0x0001,
 };
 
-struct tpm_chip;
-
-struct tpm_vendor_specific {
-       void *priv;
-};
-
-#define TPM_VPRIV(c)     ((c)->vendor.priv)
-
 #define TPM_VID_INTEL    0x8086
 #define TPM_VID_WINBOND  0x1050
 #define TPM_VID_STM      0x104A
 
        struct mutex tpm_mutex; /* tpm is processing */
 
-       struct tpm_vendor_specific vendor;
        unsigned long timeout_a; /* jiffies */
        unsigned long timeout_b; /* jiffies */
        unsigned long timeout_c; /* jiffies */
 
 
 static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct tpm_atmel_priv *priv = chip->vendor.priv;
+       struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
        u8 status, *hdr = buf;
        u32 size;
        int i;
 
 static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct tpm_atmel_priv *priv = chip->vendor.priv;
+       struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
        int i;
 
        dev_dbg(&chip->dev, "tpm_atml_send:\n");
 
 static void tpm_atml_cancel(struct tpm_chip *chip)
 {
-       struct tpm_atmel_priv *priv = chip->vendor.priv;
+       struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
        iowrite8(ATML_STATUS_ABORT, priv->iobase + 1);
 }
 
 static u8 tpm_atml_status(struct tpm_chip *chip)
 {
-       struct tpm_atmel_priv *priv = chip->vendor.priv;
+       struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
        return ioread8(priv->iobase + 1);
 }
 static void atml_plat_remove(void)
 {
        struct tpm_chip *chip = dev_get_drvdata(&pdev->dev);
-       struct tpm_atmel_priv *priv = chip->vendor.priv;
+       struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
        if (chip) {
                tpm_chip_unregister(chip);
                goto err_unreg_dev;
        }
 
-       chip->vendor.priv = priv;
+       dev_set_drvdata(&chip->dev, priv);
 
        rc = tpm_chip_register(chip);
        if (rc)
 
        void __iomem *iobase;
 };
 
-static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
-{
-       return chip->vendor.priv;
-}
-
 #ifdef CONFIG_PPC64
 
 #include <asm/prom.h>
 
 
 static u8 crb_status(struct tpm_chip *chip)
 {
-       struct crb_priv *priv = chip->vendor.priv;
+       struct crb_priv *priv = dev_get_drvdata(&chip->dev);
        u8 sts = 0;
 
        if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
 
 static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct crb_priv *priv = chip->vendor.priv;
+       struct crb_priv *priv = dev_get_drvdata(&chip->dev);
        unsigned int expected;
 
        /* sanity check */
 
 static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-       struct crb_priv *priv = chip->vendor.priv;
+       struct crb_priv *priv = dev_get_drvdata(&chip->dev);
        int rc = 0;
 
        if (len > ioread32(&priv->cca->cmd_size)) {
 
 static void crb_cancel(struct tpm_chip *chip)
 {
-       struct crb_priv *priv = chip->vendor.priv;
+       struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 
        iowrite32(cpu_to_le32(CRB_CANCEL_INVOKE), &priv->cca->cancel);
 
 
 static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
 {
-       struct crb_priv *priv = chip->vendor.priv;
+       struct crb_priv *priv = dev_get_drvdata(&chip->dev);
        u32 cancel = ioread32(&priv->cca->cancel);
 
        return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
        if (IS_ERR(chip))
                return PTR_ERR(chip);
 
-       chip->vendor.priv = priv;
+       dev_set_drvdata(&chip->dev, priv);
        chip->acpi_dev_handle = device->handle;
        chip->flags = TPM_CHIP_FLAG_TPM2;
 
 
 
 static int i2c_atmel_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        struct i2c_client *client = to_i2c_client(chip->dev.parent);
        s32 status;
 
 
 static int i2c_atmel_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        struct i2c_client *client = to_i2c_client(chip->dev.parent);
        struct tpm_output_header *hdr =
                (struct tpm_output_header *)priv->buffer;
 
 static u8 i2c_atmel_read_status(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        struct i2c_client *client = to_i2c_client(chip->dev.parent);
        int rc;
 
 {
        struct tpm_chip *chip;
        struct device *dev = &client->dev;
+       struct priv_data *priv;
 
        if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
                return -ENODEV;
        if (IS_ERR(chip))
                return PTR_ERR(chip);
 
-       chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
-                                        GFP_KERNEL);
-       if (!chip->vendor.priv)
+       priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
+       if (!priv)
                return -ENOMEM;
 
        /* Default timeouts */
        chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
        chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 
+       dev_set_drvdata(&chip->dev, priv);
+
        /* There is no known way to probe for this device, and all version
         * information seems to be read via TPM commands. Thus we rely on the
         * TPM startup process in the common code to detect the device. */
 
 {
        if ((chip->flags & TPM_CHIP_FLAG_IRQ) && queue) {
                s32 rc;
-               struct priv_data *priv = chip->vendor.priv;
+               struct priv_data *priv = dev_get_drvdata(&chip->dev);
                unsigned int cur_intrs = priv->intrs;
 
                enable_irq(priv->irq);
 static int i2c_nuvoton_recv_data(struct i2c_client *client,
                                 struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        s32 rc;
        int burst_count, bytes2read, size = 0;
 
 /* Read TPM command results */
 static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        struct device *dev = chip->dev.parent;
        struct i2c_client *client = to_i2c_client(dev);
        s32 rc;
  */
 static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        struct device *dev = chip->dev.parent;
        struct i2c_client *client = to_i2c_client(dev);
        u32 ordinal;
 static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
 {
        struct tpm_chip *chip = dev_id;
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        priv->intrs++;
        wake_up(&priv->read_queue);
        priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
-       chip->vendor.priv = priv;
 
        init_waitqueue_head(&priv->read_queue);
 
        chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
        chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 
+       dev_set_drvdata(&chip->dev, priv);
+
        /*
         * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
         *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
 
 static int i2c_nuvoton_remove(struct i2c_client *client)
 {
-       struct device *dev = &(client->dev);
-       struct tpm_chip *chip = dev_get_drvdata(dev);
+       struct tpm_chip *chip = i2c_get_clientdata(client);
+
        tpm_chip_unregister(chip);
        return 0;
 }
 
        return plpar_hcall_norets(H_SEND_CRQ, vdev->unit_address, w1, w2);
 }
 
-/**
- * ibmvtpm_get_data - Retrieve ibm vtpm data
- * @dev:       device struct
- *
- * Return value:
- *     vtpm device struct
- */
-static struct ibmvtpm_dev *ibmvtpm_get_data(const struct device *dev)
-{
-       struct tpm_chip *chip = dev_get_drvdata(dev);
-       if (chip)
-               return (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-       return NULL;
-}
-
 /**
  * tpm_ibmvtpm_recv - Receive data after send
  * @chip:      tpm chip struct
  */
 static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct ibmvtpm_dev *ibmvtpm;
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
        u16 len;
        int sig;
 
-       ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-
        if (!ibmvtpm->rtce_buf) {
                dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
                return 0;
  */
 static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct ibmvtpm_dev *ibmvtpm;
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
        struct ibmvtpm_crq crq;
        __be64 *word = (__be64 *)&crq;
        int rc, sig;
 
-       ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-
        if (!ibmvtpm->rtce_buf) {
                dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
                return 0;
  */
 static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
 {
-       struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
-       struct tpm_chip *chip = dev_get_drvdata(ibmvtpm->dev);
+       struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
        int rc = 0;
 
        tpm_chip_unregister(chip);
  */
 static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
 {
-       struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
+       struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 
        /* ibmvtpm initializes at probe time, so the data we are
        * asking for may not be set yet. Estimate that 4K required
  */
 static int tpm_ibmvtpm_suspend(struct device *dev)
 {
-       struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
+       struct tpm_chip *chip = dev_get_drvdata(dev);
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
        struct ibmvtpm_crq crq;
        u64 *buf = (u64 *) &crq;
        int rc = 0;
  */
 static int tpm_ibmvtpm_resume(struct device *dev)
 {
-       struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
+       struct tpm_chip *chip = dev_get_drvdata(dev);
+       struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
        int rc = 0;
 
        do {
 
        crq_q->index = 0;
 
-       TPM_VPRIV(chip) = (void *)ibmvtpm;
+       dev_set_drvdata(&chip->dev, ibmvtpm)
 
        spin_lock_init(&ibmvtpm->rtce_lock);
 
 
        unsigned long base;
 };
 
-static inline struct tpm_nsc_priv *nsc_get_priv(struct tpm_chip *chip)
-{
-       return chip->vendor.priv;
-}
-
 /*
  * Wait for a certain status to appear
  */
 static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
 {
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
        unsigned long stop;
 
        /* status immediately available check */
-       *data = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+       *data = inb(priv->base + NSC_STATUS);
        if ((*data & mask) == val)
                return 0;
 
        stop = jiffies + 10 * HZ;
        do {
                msleep(TPM_TIMEOUT);
-               *data = inb(nsc_get_priv(chip)->base + 1);
+               *data = inb(priv->base + 1);
                if ((*data & mask) == val)
                        return 0;
        }
 
 static int nsc_wait_for_ready(struct tpm_chip *chip)
 {
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
        int status;
        unsigned long stop;
 
        /* status immediately available check */
-       status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+       status = inb(priv->base + NSC_STATUS);
        if (status & NSC_STATUS_OBF)
-               status = inb(nsc_get_priv(chip)->base + NSC_DATA);
+               status = inb(priv->base + NSC_DATA);
        if (status & NSC_STATUS_RDY)
                return 0;
 
        stop = jiffies + 100;
        do {
                msleep(TPM_TIMEOUT);
-               status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+               status = inb(priv->base + NSC_STATUS);
                if (status & NSC_STATUS_OBF)
-                       status = inb(nsc_get_priv(chip)->base + NSC_DATA);
+                       status = inb(priv->base + NSC_DATA);
                if (status & NSC_STATUS_RDY)
                        return 0;
        }
 
 static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 {
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
        u8 *buffer = buf;
        u8 data, *p;
        u32 size;
                return -EIO;
        }
 
-       data = inb(nsc_get_priv(chip)->base + NSC_DATA);
+       data = inb(priv->base + NSC_DATA);
        if (data != NSC_COMMAND_NORMAL) {
                dev_err(&chip->dev, "not in normal mode (0x%x)\n",
                        data);
                }
                if (data & NSC_STATUS_F0)
                        break;
-               *p = inb(nsc_get_priv(chip)->base + NSC_DATA);
+               *p = inb(priv->base + NSC_DATA);
        }
 
        if ((data & NSC_STATUS_F0) == 0 &&
                return -EIO;
        }
 
-       data = inb(nsc_get_priv(chip)->base + NSC_DATA);
+       data = inb(priv->base + NSC_DATA);
        if (data != NSC_COMMAND_EOC) {
                dev_err(&chip->dev,
                        "expected end of command(0x%x)\n", data);
 
 static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
 {
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
        u8 data;
        int i;
 
         * fix it. Not sure why this is needed, we followed the flow
         * chart in the manual to the letter.
         */
-       outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
+       outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
 
        if (nsc_wait_for_ready(chip) != 0)
                return -EIO;
                return -EIO;
        }
 
-       outb(NSC_COMMAND_NORMAL, nsc_get_priv(chip)->base + NSC_COMMAND);
+       outb(NSC_COMMAND_NORMAL, priv->base + NSC_COMMAND);
        if (wait_for_stat(chip, NSC_STATUS_IBR, NSC_STATUS_IBR, &data) < 0) {
                dev_err(&chip->dev, "IBR timeout\n");
                return -EIO;
                                "IBF timeout (while writing data)\n");
                        return -EIO;
                }
-               outb(buf[i], nsc_get_priv(chip)->base + NSC_DATA);
+               outb(buf[i], priv->base + NSC_DATA);
        }
 
        if (wait_for_stat(chip, NSC_STATUS_IBF, 0, &data) < 0) {
                dev_err(&chip->dev, "IBF timeout\n");
                return -EIO;
        }
-       outb(NSC_COMMAND_EOC, nsc_get_priv(chip)->base + NSC_COMMAND);
+       outb(NSC_COMMAND_EOC, priv->base + NSC_COMMAND);
 
        return count;
 }
 
 static void tpm_nsc_cancel(struct tpm_chip *chip)
 {
-       outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
+
+       outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
 }
 
 static u8 tpm_nsc_status(struct tpm_chip *chip)
 {
-       return inb(nsc_get_priv(chip)->base + NSC_STATUS);
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
+
+       return inb(priv->base + NSC_STATUS);
 }
 
 static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status)
 static void tpm_nsc_remove(struct device *dev)
 {
        struct tpm_chip *chip = dev_get_drvdata(dev);
+       struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 
        tpm_chip_unregister(chip);
-       release_region(nsc_get_priv(chip)->base, 2);
+       release_region(priv->base, 2);
 }
 
 static SIMPLE_DEV_PM_OPS(tpm_nsc_pm, tpm_pm_suspend, tpm_pm_resume);
                goto err_rel_reg;
        }
 
-       chip->vendor.priv = priv;
+       dev_set_drvdata(&chip->dev, priv);
 
        rc = tpm_chip_register(chip);
        if (rc)
 
  * correct values in the other bits.' */
 static int wait_startup(struct tpm_chip *chip, int l)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        unsigned long stop = jiffies + chip->timeout_a;
        do {
                if (ioread8(priv->iobase + TPM_ACCESS(l)) &
 
 static int check_locality(struct tpm_chip *chip, int l)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        if ((ioread8(priv->iobase + TPM_ACCESS(l)) &
             (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
 
 static void release_locality(struct tpm_chip *chip, int l, int force)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        if (force || (ioread8(priv->iobase + TPM_ACCESS(l)) &
                      (TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID)) ==
 
 static int request_locality(struct tpm_chip *chip, int l)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        unsigned long stop, timeout;
        long rc;
 
 
 static u8 tpm_tis_status(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        return ioread8(priv->iobase +
                       TPM_STS(priv->locality));
 
 static void tpm_tis_ready(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        /* this causes the current command to be aborted */
        iowrite8(TPM_STS_COMMAND_READY,
 
 static int get_burstcount(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        unsigned long stop;
        int burstcnt;
 
 
 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int size = 0, burstcnt;
        while (size < count &&
               wait_for_tpm_stat(chip,
 
 static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int size = 0;
        int expected, status;
 
  */
 static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int rc, status, burstcnt;
        size_t count = 0;
 
 
 static void disable_interrupts(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        u32 intmask;
 
        intmask =
  */
 static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int rc;
        u32 ordinal;
        unsigned long dur;
 static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
        int rc, irq;
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        if (!(chip->flags & TPM_CHIP_FLAG_IRQ) || priv->irq_tested)
                return tpm_tis_send_main(chip, buf, len);
 static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
                                    unsigned long *timeout_cap)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int i;
        u32 did_vid;
 
  */
 static int probe_itpm(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        int rc = 0;
        u8 cmd_getticks[] = {
                0x00, 0xc1, 0x00, 0x00, 0x00, 0x0a,
 
 static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
        switch (priv->manufacturer_id) {
        case TPM_VID_WINBOND:
 static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 {
        struct tpm_chip *chip = dev_id;
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        u32 interrupt;
        int i;
 
        if (interrupt == 0)
                return IRQ_NONE;
 
-       ((struct priv_data *)chip->vendor.priv)->irq_tested = true;
+       priv->irq_tested = true;
        if (interrupt & TPM_INTF_DATA_AVAIL_INT)
                wake_up_interruptible(&priv->read_queue);
        if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
 static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
                                    int flags, int irq)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        u8 original_int_vec;
 
        if (devm_request_irq(&chip->dev, irq, tis_int_handler, flags,
  */
 static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        u8 original_int_vec;
        int i;
 
 
 static void tpm_tis_remove(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        void __iomem *reg = priv->iobase + TPM_INT_ENABLE(priv->locality);
 
        iowrite32(~TPM_GLOBAL_INT_ENABLE & ioread32(reg), reg);
        if (IS_ERR(chip))
                return PTR_ERR(chip);
 
-       chip->vendor.priv = priv;
 #ifdef CONFIG_ACPI
        chip->acpi_dev_handle = acpi_dev_handle;
 #endif
        chip->timeout_c = TIS_TIMEOUT_C_MAX;
        chip->timeout_d = TIS_TIMEOUT_D_MAX;
 
+       dev_set_drvdata(&chip->dev, priv);
+
        if (wait_startup(chip, 0) != 0) {
                rc = -ENODEV;
                goto out_err;
 #ifdef CONFIG_PM_SLEEP
 static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
 {
-       struct priv_data *priv = chip->vendor.priv;
+       struct priv_data *priv = dev_get_drvdata(&chip->dev);
        u32 intmask;
 
        /* reenable interrupts that device may have lost or
 
 
 static u8 vtpm_status(struct tpm_chip *chip)
 {
-       struct tpm_private *priv = TPM_VPRIV(chip);
+       struct tpm_private *priv = dev_get_drvdata(&chip->dev);
        switch (priv->shr->state) {
        case VTPM_STATE_IDLE:
                return VTPM_STATUS_IDLE | VTPM_STATUS_CANCELED;
 
 static void vtpm_cancel(struct tpm_chip *chip)
 {
-       struct tpm_private *priv = TPM_VPRIV(chip);
+       struct tpm_private *priv = dev_get_drvdata(&chip->dev);
        priv->shr->state = VTPM_STATE_CANCEL;
        wmb();
        notify_remote_via_evtchn(priv->evtchn);
 
 static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct tpm_private *priv = TPM_VPRIV(chip);
+       struct tpm_private *priv = dev_get_drvdata(&chip->dev);
        struct vtpm_shared_page *shr = priv->shr;
        unsigned int offset = shr_data_offset(shr);
 
 
 static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-       struct tpm_private *priv = TPM_VPRIV(chip);
+       struct tpm_private *priv = dev_get_drvdata(&chip->dev);
        struct vtpm_shared_page *shr = priv->shr;
        unsigned int offset = shr_data_offset(shr);
        size_t length = shr->length;
        init_waitqueue_head(&priv->read_queue);
 
        priv->chip = chip;
-       TPM_VPRIV(chip) = priv;
+       dev_set_drvdata(&chip->dev, priv);
 
        return 0;
 }
 static int tpmfront_remove(struct xenbus_device *dev)
 {
        struct tpm_chip *chip = dev_get_drvdata(&dev->dev);
-       struct tpm_private *priv = TPM_VPRIV(chip);
+       struct tpm_private *priv = dev_get_drvdata(&chip->dev);
        tpm_chip_unregister(chip);
        ring_free(priv);
-       TPM_VPRIV(chip) = NULL;
+       dev_set_drvdata(&chip->dev, NULL);
        return 0;
 }