If you have any choice in the matter, communicate with devices in userspace. Userspace drivers are much easier to develop, easier to make secure, and are less likely to require updates to function on newer kernels.
Situations where a kernel driver may be unavoidable include:
If your hardware provides standard services which will be consumed by other parts of the kernel -- for instance, if it is a block device or a network device. Input devices and video devices may also fall into this category, depending on how you plan to use them.
If your device has unusually tight timing requirements which cannot be met by a userspace application, or if it requires driver components which are only available in kernel space, like hardware timers.
If you are interfacing with hardware that is not directly exposed to userspace, like a PCI device. (Even so, it may be situationally appropriate to write a "thin" kernel driver and do the rest of the work in userspace.)