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

Commit 9d7ab5aa authored by Sudip Mukherjee's avatar Sudip Mukherjee Committed by Martin K. Petersen
Browse files

scsi: ppa: use new parport device model



Modify ppa driver to use the new parallel port device model.

Signed-off-by: default avatarSudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 648a0a7d
Loading
Loading
Loading
Loading
+40 −6
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ typedef struct {
	unsigned long recon_tmo;	/* How many usecs to wait for reconnection (6th bit) */
	unsigned int failed:1;	/* Failure flag                 */
	unsigned wanted:1;	/* Parport sharing busy flag    */
	unsigned int dev_no;	/* Device number		*/
	wait_queue_head_t *waiting;
	struct Scsi_Host *host;
	struct list_head list;
@@ -985,15 +986,40 @@ static struct scsi_host_template ppa_template = {

static LIST_HEAD(ppa_hosts);

/*
 * Finds the first available device number that can be alloted to the
 * new ppa device and returns the address of the previous node so that
 * we can add to the tail and have a list in the ascending order.
 */

static inline ppa_struct *find_parent(void)
{
	ppa_struct *dev, *par = NULL;
	unsigned int cnt = 0;

	if (list_empty(&ppa_hosts))
		return NULL;

	list_for_each_entry(dev, &ppa_hosts, list) {
		if (dev->dev_no != cnt)
			return par;
		cnt++;
		par = dev;
	}

	return par;
}

static int __ppa_attach(struct parport *pb)
{
	struct Scsi_Host *host;
	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
	DEFINE_WAIT(wait);
	ppa_struct *dev;
	ppa_struct *dev, *temp;
	int ports;
	int modes, ppb, ppb_hi;
	int err = -ENOMEM;
	struct pardev_cb ppa_cb;

	dev = kzalloc(sizeof(ppa_struct), GFP_KERNEL);
	if (!dev)
@@ -1002,8 +1028,15 @@ static int __ppa_attach(struct parport *pb)
	dev->mode = PPA_AUTODETECT;
	dev->recon_tmo = PPA_RECON_TMO;
	init_waitqueue_head(&waiting);
	dev->dev = parport_register_device(pb, "ppa", NULL, ppa_wakeup,
					    NULL, 0, dev);
	temp = find_parent();
	if (temp)
		dev->dev_no = temp->dev_no + 1;

	memset(&ppa_cb, 0, sizeof(ppa_cb));
	ppa_cb.private = dev;
	ppa_cb.wakeup = ppa_wakeup;

	dev->dev = parport_register_dev_model(pb, "ppa", &ppa_cb, dev->dev_no);

	if (!dev->dev)
		goto out;
@@ -1111,8 +1144,9 @@ static void ppa_detach(struct parport *pb)

static struct parport_driver ppa_driver = {
	.name		= "ppa",
	.attach	= ppa_attach,
	.match_port	= ppa_attach,
	.detach		= ppa_detach,
	.devmodel	= true,
};

static int __init ppa_driver_init(void)