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

Commit 3321371b authored by Alexander Shishkin's avatar Alexander Shishkin
Browse files

intel_th: pci: Use drvdata for quirks



Allow attaching miscellaneous quirk information to devices as drvdata.

Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
parent efb3669e
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -576,6 +576,7 @@ intel_th_subdevice_alloc(struct intel_th *th,
	if (!thdev)
		return ERR_PTR(-ENOMEM);

	thdev->drvdata = th->drvdata;

	memcpy(res, subdev->res,
	       sizeof(struct resource) * subdev->nres);
@@ -789,8 +790,8 @@ static const struct file_operations intel_th_output_fops = {
 * @irq:	irq number
 */
struct intel_th *
intel_th_alloc(struct device *dev, struct resource *devres,
	       unsigned int ndevres, int irq)
intel_th_alloc(struct device *dev, struct intel_th_drvdata *drvdata,
	       struct resource *devres, unsigned int ndevres, int irq)
{
	struct intel_th *th;
	int err;
@@ -812,6 +813,7 @@ intel_th_alloc(struct device *dev, struct resource *devres,
		goto err_ida;
	}
	th->dev = dev;
	th->drvdata = drvdata;

	th->resource = devres;
	th->num_resources = ndevres;
+20 −7
Original line number Diff line number Diff line
@@ -47,9 +47,20 @@ struct intel_th_output {
	bool		active;
};

/**
 * struct intel_th_drvdata - describes hardware capabilities and quirks
 * @tscu_enable:	device needs SW to enable time stamping unit
 */
struct intel_th_drvdata {
	unsigned int	tscu_enable        : 1;
};

#define INTEL_TH_CAP(_th, _cap) ((_th)->drvdata ? (_th)->drvdata->_cap : 0)

/**
 * struct intel_th_device - device on the intel_th bus
 * @dev:		device
 * @drvdata:		hardware capabilities/quirks
 * @resource:		array of resources available to this device
 * @num_resources:	number of resources in @resource array
 * @type:		INTEL_TH_{SOURCE,OUTPUT,SWITCH}
@@ -60,6 +71,7 @@ struct intel_th_output {
 */
struct intel_th_device {
	struct device		dev;
	struct intel_th_drvdata *drvdata;
	struct resource		*resource;
	unsigned int		num_resources;
	unsigned int		type;
@@ -206,8 +218,8 @@ static inline struct intel_th *to_intel_th(struct intel_th_device *thdev)
}

struct intel_th *
intel_th_alloc(struct device *dev, struct resource *devres,
	       unsigned int ndevres, int irq);
intel_th_alloc(struct device *dev, struct intel_th_drvdata *drvdata,
	       struct resource *devres, unsigned int ndevres, int irq);
void intel_th_free(struct intel_th *th);

int intel_th_driver_register(struct intel_th_driver *thdrv);
@@ -248,6 +260,7 @@ struct intel_th {

	struct intel_th_device	*thdev[TH_SUBDEVICE_MAX];
	struct intel_th_device	*hub;
	struct intel_th_drvdata	*drvdata;

	struct resource		*resource;
	unsigned int		num_thdevs;
+2 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
static int intel_th_pci_probe(struct pci_dev *pdev,
			      const struct pci_device_id *id)
{
	struct intel_th_drvdata *drvdata = (void *)id->driver_data;
	struct intel_th *th;
	int err;

@@ -41,7 +42,7 @@ static int intel_th_pci_probe(struct pci_dev *pdev,
	if (err)
		return err;

	th = intel_th_alloc(&pdev->dev, pdev->resource,
	th = intel_th_alloc(&pdev->dev, drvdata, pdev->resource,
			    DEVICE_COUNT_RESOURCE, pdev->irq);
	if (IS_ERR(th))
		return PTR_ERR(th);