Alternate to a proportional linear solenoid
You could use feedback (either linear position or shaft angle) to position the motor shaft with a sego loop. Ideally if you're using the translational position as feedback you'd include the inverse kinematic in the controller. If you're controlling shaft angle you can linearize the response by a similar method.

So the suggestion is- measure the input current (control set point) and control the cam angle either directly or via measuring the resulting translational displacement.