Correct. Spinlocks are not required on SMP systems therefore they are not required. However, your driver must act as though they do, to arbitrate access to the hardware itself (the latches and so-forth that actually make the device operate).
In addition to this, however, you must implement software-level concurrency controls .. which have nothing at all to do with spinlocks. These are concerned with putting processes and threads to sleep and waking them up.
Your first question should be: what do you
want to happen if more than one process/thread tries to use this device at the same time? Should they be allowed to open it? If so, and if more than one thread (natcherly ...) tries to read and write to it, what
makes sense? What should the other computer on the other end of the wire expect to see? Or, if they're just blinking lights, how does it make sense for them to blink?
Once you know that, and making heavy use of existing driver source-code as your example, you'll build appropriate code into your driver to synchronize the activities of multiple processes without, of course, preventing them from being SIGKILLed. Again, just find an existing driver that already implements the intended behavior, and
read it.