As PDHide pointed out, the Driver you are sending is not used (although you are sending the same instance as you had before.
However, the biggest problem is that you are creating a circular dependency graph. It means that any change in any class would require all of them to be re-compiled and re-deployed (and worse of all, means that any change can introduce bugs in any class).

Since you want to have a single instance of Driver, you can break this loop by introducing a Singleton. Additionally, you may want to add a Driver interface so you won't couple your page objects to Selenium (particularly for unit testing purposes).

This way, your tests can do something like to fetch the instance:
Login login = new Login(SeleniumDriver.getInstance());
And your page objects would simply:
public LoginPage(Driver driver){
this.driver = driver
}
This way you can create test doubles for the Driver interface to check the page objects in isolation.
If you want to furthermore isolate your tests from the page objects themselves, you may want to add a Factory for the page objects.