diff options
Diffstat (limited to 'drivers/media/IR/imon.c')
| -rw-r--r-- | drivers/media/IR/imon.c | 75 | 
1 files changed, 41 insertions, 34 deletions
diff --git a/drivers/media/IR/imon.c b/drivers/media/IR/imon.c index 5e204567000..4bbd45f4284 100644 --- a/drivers/media/IR/imon.c +++ b/drivers/media/IR/imon.c @@ -94,6 +94,7 @@ struct imon_context {  	bool display_supported;		/* not all controllers do */  	bool display_isopen;		/* display port has been opened */ +	bool rf_device;			/* true if iMON 2.4G LT/DT RF device */  	bool rf_isassociating;		/* RF remote associating */  	bool dev_present_intf0;		/* USB device presence, interface 0 */  	bool dev_present_intf1;		/* USB device presence, interface 1 */ @@ -385,7 +386,7 @@ static int display_open(struct inode *inode, struct file *file)  		err("%s: display port is already open", __func__);  		retval = -EBUSY;  	} else { -		ictx->display_isopen = 1; +		ictx->display_isopen = true;  		file->private_data = ictx;  		dev_dbg(ictx->dev, "display port opened\n");  	} @@ -422,7 +423,7 @@ static int display_close(struct inode *inode, struct file *file)  		err("%s: display is not open", __func__);  		retval = -EIO;  	} else { -		ictx->display_isopen = 0; +		ictx->display_isopen = false;  		dev_dbg(ictx->dev, "display port closed\n");  		if (!ictx->dev_present_intf0) {  			/* @@ -491,12 +492,12 @@ static int send_packet(struct imon_context *ictx)  	}  	init_completion(&ictx->tx.finished); -	ictx->tx.busy = 1; +	ictx->tx.busy = true;  	smp_rmb(); /* ensure later readers know we're busy */  	retval = usb_submit_urb(ictx->tx_urb, GFP_KERNEL);  	if (retval) { -		ictx->tx.busy = 0; +		ictx->tx.busy = false;  		smp_rmb(); /* ensure later readers know we're not busy */  		err("%s: error submitting urb(%d)", __func__, retval);  	} else { @@ -682,7 +683,7 @@ static ssize_t store_associate_remote(struct device *d,  		return -ENODEV;  	mutex_lock(&ictx->lock); -	ictx->rf_isassociating = 1; +	ictx->rf_isassociating = true;  	send_associate_24g(ictx);  	mutex_unlock(&ictx->lock); @@ -950,7 +951,7 @@ static void usb_tx_callback(struct urb *urb)  	ictx->tx.status = urb->status;  	/* notify waiters that write has finished */ -	ictx->tx.busy = 0; +	ictx->tx.busy = false;  	smp_rmb(); /* ensure later readers know we're not busy */  	complete(&ictx->tx.finished);  } @@ -1215,7 +1216,7 @@ static bool imon_mouse_event(struct imon_context *ictx,  {  	char rel_x = 0x00, rel_y = 0x00;  	u8 right_shift = 1; -	bool mouse_input = 1; +	bool mouse_input = true;  	int dir = 0;  	/* newer iMON device PAD or mouse button */ @@ -1246,7 +1247,7 @@ static bool imon_mouse_event(struct imon_context *ictx,  	} else if (ictx->kc == KEY_CHANNELDOWN && (buf[2] & 0x40) != 0x40) {  		dir = -1;  	} else -		mouse_input = 0; +		mouse_input = false;  	if (mouse_input) {  		dev_dbg(ictx->dev, "sending mouse data via input subsystem\n"); @@ -1450,7 +1451,7 @@ static void imon_incoming_packet(struct imon_context *ictx,  	unsigned char *buf = urb->transfer_buffer;  	struct device *dev = ictx->dev;  	u32 kc; -	bool norelease = 0; +	bool norelease = false;  	int i;  	u64 temp_key;  	u64 panel_key = 0; @@ -1465,7 +1466,7 @@ static void imon_incoming_packet(struct imon_context *ictx,  	idev = ictx->idev;  	/* filter out junk data on the older 0xffdc imon devices */ -	if ((buf[0] == 0xff) && (buf[7] == 0xff)) +	if ((buf[0] == 0xff) && (buf[1] == 0xff) && (buf[2] == 0xff))  		return;  	/* Figure out what key was pressed */ @@ -1517,7 +1518,7 @@ static void imon_incoming_packet(struct imon_context *ictx,  	     !(buf[1] & 0x1 || buf[1] >> 2 & 0x1))) {  		len = 8;  		imon_pad_to_keys(ictx, buf); -		norelease = 1; +		norelease = true;  	}  	if (debug) { @@ -1580,7 +1581,7 @@ not_input_data:  	    (buf[6] == 0x5E && buf[7] == 0xDF))) {	/* DT */  		dev_warn(dev, "%s: remote associated refid=%02X\n",  			 __func__, buf[1]); -		ictx->rf_isassociating = 0; +		ictx->rf_isassociating = false;  	}  } @@ -1790,9 +1791,9 @@ static bool imon_find_endpoints(struct imon_context *ictx,  	int ifnum = iface_desc->desc.bInterfaceNumber;  	int num_endpts = iface_desc->desc.bNumEndpoints;  	int i, ep_dir, ep_type; -	bool ir_ep_found = 0; -	bool display_ep_found = 0; -	bool tx_control = 0; +	bool ir_ep_found = false; +	bool display_ep_found = false; +	bool tx_control = false;  	/*  	 * Scan the endpoint list and set: @@ -1808,13 +1809,13 @@ static bool imon_find_endpoints(struct imon_context *ictx,  		    ep_type == USB_ENDPOINT_XFER_INT) {  			rx_endpoint = ep; -			ir_ep_found = 1; +			ir_ep_found = true;  			dev_dbg(ictx->dev, "%s: found IR endpoint\n", __func__);  		} else if (!display_ep_found && ep_dir == USB_DIR_OUT &&  			   ep_type == USB_ENDPOINT_XFER_INT) {  			tx_endpoint = ep; -			display_ep_found = 1; +			display_ep_found = true;  			dev_dbg(ictx->dev, "%s: found display endpoint\n", __func__);  		}  	} @@ -1835,8 +1836,8 @@ static bool imon_find_endpoints(struct imon_context *ictx,  	 * newer iMON devices that use control urb instead of interrupt  	 */  	if (!display_ep_found) { -		tx_control = 1; -		display_ep_found = 1; +		tx_control = true; +		display_ep_found = true;  		dev_dbg(ictx->dev, "%s: device uses control endpoint, not "  			"interface OUT endpoint\n", __func__);  	} @@ -1847,7 +1848,7 @@ static bool imon_find_endpoints(struct imon_context *ictx,  	 * and without... :\  	 */  	if (ictx->display_type == IMON_DISPLAY_TYPE_NONE) { -		display_ep_found = 0; +		display_ep_found = false;  		dev_dbg(ictx->dev, "%s: device has no display\n", __func__);  	} @@ -1856,7 +1857,7 @@ static bool imon_find_endpoints(struct imon_context *ictx,  	 * that refers to e.g. /dev/lcd0 (a character device LCD or VFD).  	 */  	if (ictx->display_type == IMON_DISPLAY_TYPE_VGA) { -		display_ep_found = 0; +		display_ep_found = false;  		dev_dbg(ictx->dev, "%s: iMON Touch device found\n", __func__);  	} @@ -1905,9 +1906,10 @@ static struct imon_context *imon_init_intf0(struct usb_interface *intf)  	ictx->dev = dev;  	ictx->usbdev_intf0 = usb_get_dev(interface_to_usbdev(intf)); -	ictx->dev_present_intf0 = 1; +	ictx->dev_present_intf0 = true;  	ictx->rx_urb_intf0 = rx_urb;  	ictx->tx_urb = tx_urb; +	ictx->rf_device = false;  	ictx->vendor  = le16_to_cpu(ictx->usbdev_intf0->descriptor.idVendor);  	ictx->product = le16_to_cpu(ictx->usbdev_intf0->descriptor.idProduct); @@ -1979,7 +1981,7 @@ static struct imon_context *imon_init_intf1(struct usb_interface *intf,  	}  	ictx->usbdev_intf1 = usb_get_dev(interface_to_usbdev(intf)); -	ictx->dev_present_intf1 = 1; +	ictx->dev_present_intf1 = true;  	ictx->rx_urb_intf1 = rx_urb;  	ret = -ENODEV; @@ -2047,6 +2049,12 @@ static void imon_get_ffdc_type(struct imon_context *ictx)  		dev_info(ictx->dev, "0xffdc iMON Knob, iMON IR");  		ictx->display_supported = false;  		break; +	/* iMON 2.4G LT (usb stick), no display, iMON RF */ +	case 0x4e: +		dev_info(ictx->dev, "0xffdc iMON 2.4G LT, iMON RF"); +		ictx->display_supported = false; +		ictx->rf_device = true; +		break;  	/* iMON VFD, no IR (does have vol knob tho) */  	case 0x35:  		dev_info(ictx->dev, "0xffdc iMON VFD + knob, no IR"); @@ -2197,15 +2205,6 @@ static int __devinit imon_probe(struct usb_interface *interface,  			goto fail;  		} -		if (product == 0xffdc) { -			/* RF products *also* use 0xffdc... sigh... */ -			sysfs_err = sysfs_create_group(&interface->dev.kobj, -						       &imon_rf_attribute_group); -			if (sysfs_err) -				err("%s: Could not create RF sysfs entries(%d)", -				    __func__, sysfs_err); -		} -  	} else {  	/* this is the secondary interface on the device */  		ictx = imon_init_intf1(interface, first_if_ctx); @@ -2233,6 +2232,14 @@ static int __devinit imon_probe(struct usb_interface *interface,  		imon_set_display_type(ictx, interface); +		if (product == 0xffdc && ictx->rf_device) { +			sysfs_err = sysfs_create_group(&interface->dev.kobj, +						       &imon_rf_attribute_group); +			if (sysfs_err) +				err("%s: Could not create RF sysfs entries(%d)", +				    __func__, sysfs_err); +		} +  		if (ictx->display_supported)  			imon_init_display(ictx, interface);  	} @@ -2297,7 +2304,7 @@ static void __devexit imon_disconnect(struct usb_interface *interface)  	}  	if (ifnum == 0) { -		ictx->dev_present_intf0 = 0; +		ictx->dev_present_intf0 = false;  		usb_kill_urb(ictx->rx_urb_intf0);  		input_unregister_device(ictx->idev);  		if (ictx->display_supported) { @@ -2307,7 +2314,7 @@ static void __devexit imon_disconnect(struct usb_interface *interface)  				usb_deregister_dev(interface, &imon_vfd_class);  		}  	} else { -		ictx->dev_present_intf1 = 0; +		ictx->dev_present_intf1 = false;  		usb_kill_urb(ictx->rx_urb_intf1);  		if (ictx->display_type == IMON_DISPLAY_TYPE_VGA)  			input_unregister_device(ictx->touch);  |